hackiy 发表于 2012-6-14 13:08:39

实验11详细解析,高效代码!

本帖最后由 hackiy 于 2012-6-14 13:50 编辑

assume cs:codesg

datasg segment
      db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends

codesg segment
start:      mov ax,datasg
                mov ds,ax
                mov si,0
                call letterc

over:      mov ax,4c00h
                int 21h

;说明:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si指向字符串的首地址
letterc:;注意,需要转换的是字符串a-z,而不是其他字符
                push si                        ;子程序入栈
               
        s:        cmp byte ptr ,0                ;模拟(si)-0
                je ok                        ;结果等于0则结束
               
                cmp byte ptr ,61h        ;小写a的assci码16进制为61h
                jb no                        ;低于61h则跳到no
               
                cmp byte ptr ,7ah        ;小写z的assci码16进制为7ah
                ja no                        ;高于7ah则跳到no
               
                and byte ptr ,0dfh        ;转变为大写(11011111b)
               
        no:         inc si                        ;处理下一个字符
                jmp short s                ;回到标号s处

       ok:       pop si                        ;子程序出栈
              ret                        ;子程序返回               
codesg ends
end start
页: [1]
查看完整版本: 实验11详细解析,高效代码!