在数据区,给定用0作为结束的字符串,请补充完成子程序,只保留字符串中的大写字母,并在最后一个大写字母后记录0作为所有大写字母构成的新字符串的结束。(以下面程序数据区中给出的字符串,最后得到的字符串为YTU后加0)
assume cs:code, ds:data, ss:stack
data segment
db 'YanTai University 264005', 0
data ends
stack segment stack
dw 100h dup (0)
stack ends
code segment
start: mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 100h
mov bx, 0
mov di,0
call getUpper
mov ax, 4c00h
int 21h
getUpper proc
push ax
push si
push bx
mov si,0
s:
mov al,[bx];把字符放入al寄存器
or al,al;相或,若为0,则(al)=0
jz ok ;跳转到ok
cmp al,'A';al与A的ascll码相比
jae next;若大于等于则跳到next
jmp c;否则跳到c
next:cmp al,'Z';与Z进行比较
jbe zero;小于等于则调到跳到zero
jmp c
zero:mov [si],ax;将得到的大写字母放到si所在偏移地址的数据段
inc si
c:
inc bx
jmp s
ok:
mov [si],al;将0放到最后
pop bx
pop si
pop ax
ret
getUpper endp
code ends
end start