20060502156 发表于 2007-11-20 20:44

键盘输入的大、小写字母字符串,均用大写字母显示在屏幕上

;------------------------------------------------------------------------
;编写一程序,要求对键盘输入的大、小写字母字符串,均用大写字母显示在屏幕上
;------------------------------------------------------------------------
code segment                     ;代码段
   assume cs:code,ds:code
   org 100h                  ;从100h开始
start:jmp begin                  ;跳到begin
p1 db 100                  
p2 db 0
array db 100h dup(?)             ;置100个字节的缓冲区存放数据
begin:lea bx,array               ;将array的首地址给bx
      mov ax,cs                  ;置cs-->ds
      mov ds,ax
      mov dx,offset p1         ;将p1的偏移量给dx
      mov ah,0ah               ;调用中断21的0a号功能从键盘接收字符
      int 21h
      xor bx,bx                  ;将bx清零
      mov bl,p2                  ;p2-->bl
      mov array,'$'          ;送'$'至字符串尾
      mov di,0ffffh            ;-1-->di
next: inc di                     ;di自加
      cmp array,'$'          ;比较
      jeexit                   ;相等,则跳到exit执行
      cmp array,61h          ;(A~Z-->41h-5aha~z-->61h-7ah)与a比较
      jldisp                   ;小于,则跳
      cmp array,7ah          ;与z比较
      jgdisp                   ;大于,则跳
      sub array,20h          ;减20h,小写转大写
disp: loop next
exit: mov p1,0dh               ;回车换行
      mov p2,0ah
      mov ah,09h
      int 21h
      mov ah,4ch               ;程序结束
      int 21h   
code ends
   end begin

20060502156 发表于 2007-11-28 12:35

急啊,下周就要上机检查这个!

以上是输入小写时转换大写,遇其它情况不做变动,原样输出,谁能替我加一段代码,使它在输入小写情况以外时,输出一个提示ERROR单词.

20060502156 发表于 2007-11-28 12:39

急啊,下周就要上机检查这个!

:m01: :m01: :m01: :m01: :m01: :m01: :m01: :m01: :m01: :m01: :m01: :m01: :m01: :m01: :em02: :em02: :em02: :em02: :em02: :em02: :em02: :em02: :em02: :em02: :em02: :em02: :em02: :em02:

cjaizss 发表于 2007-11-28 12:49

这个,属于协议类问题,只好自己对着资料,对着代码调吧。

dxcnjupt 发表于 2007-11-28 14:29

使它在输入小写情况以外时,输出一个提示ERROR单词.
-----------------------
既然你能做的出小写转大写,
以你的水平来说,这个也不会有任何难度。

把cmp--jcc的条件和跳转地址改一下就可以了,再加一个显示ERROR的函数。

20060502156 发表于 2007-11-30 11:18

能给俺补上吗!

本人最近很忙又没有精力,希望有人帮我改出来,谢谢!!!

20060502156 发表于 2007-11-30 11:20

把cmp--jcc的条件和跳转地址改一下就可以了,再加一个显示ERROR的函数。

希望骑士帮忙!帮我改出来,谢谢!!!

20060502156 发表于 2007-12-11 01:29

终于做出来了,还的靠自己!!!

data segment
        msg byte'Eroor',0dh,0ah,'$'
        data ends


code segment                     ;代码段
   assume cs:code,ds:code
   org 100h                  ;从100h开始
start:jmp begin                  ;跳到begin
p1 db 100                  
p2 db 0
array db 100h dup(?)             ;置100个字节的缓冲区存放数据
begin:lea bx,array               ;将array的首地址给bx
      mov ax,cs                  ;置cs-->ds
      mov ds,ax
      mov dx,offset p1         ;将p1的偏移量给dx
      mov ah,0ah               ;调用中断21的0a号功能从键盘接收字符
      int 21h
      xor bx,bx                  ;将bx清零
      mov bl,p2                  ;p2-->bl
      mov array,'$'          ;送'$'至字符串尾
      mov di,0ffffh            ;-1-->di
next: inc di                     ;di自加
      cmp array,'$'                ;相等,则跳到exit执行
      je exit
      
      cmp array,61h          ;(A~Z-->41h-5aha~z-->61h-7ah)与a比较
      jl@f                  ;小于,则跳
      cmp array,7ah          ;与z比较
      jg@f                   ;大于,则跳
      sub array,20h          ;减20h,小写转大写
      loop next
@@:        mov ax,data
        mov ds,ax
        mov dx,offset msg
        mov ah,9
        int 21h
       
exit: mov p1,0dh               ;回车换行
      mov p2,0ah
      mov ah,09h
      int 21h
      mov ah,4ch               ;程序结束
      int 21h   
code ends
   end begin
页: [1]
查看完整版本: 键盘输入的大、小写字母字符串,均用大写字母显示在屏幕上