汇编语言实验11完整代码及解析
建议先自己思考问题的答案,不懂则返回看书
考察点: 对cmp 及 je、jne、jb、jnb、ja、jna的熟练使用
assume cs: code
data segment
db "Beginner's All-purpose2324 Symb34325olic Instruction Code.",0
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si, 0
call letterc
mov dh,10 ;dh 行号,0-24
mov dl,8 ;dl 列号,0-79
mov cl,1 ;cl 颜色
mov ax,data
mov ds,ax
mov si,0 ;ds:si指向字符串首地址
call show_str
mov ax, 4c00h
int 21h
letterc:
push ax
push si
mov ax,0
s:
mov al,ds:[si]
cmp al,0
je over
cmp al,97
jb next
cmp al,122
ja next
sub al,32
mov ds:[si],al
next:
inc si
jmp short s
over:
pop si
pop ax
ret
show_str:
push dx
push ax
push di
push es
push cx
push ds
push si
;实际行号
mov ax,160
mul dh ;行号偏移地址存在al中
mov dh,0
;实际列号
dec dl
add dl,dl ;列偏移地址存在dl中
add ax,dx
mov di,ax ;总体偏移地址在di中
mov ax,0b800h
mov es,ax ;所以es:[di]指向显存中的第一个位置
mov ah,cl ;颜色存在ah中
mov cx,0
shows:
mov al,ds:[si]
mov cl,al
jcxz showover
mov es:[di],ax
inc si
add di,2
jmp short shows
showover:
pop si
pop ds
pop cx
pop es
pop di
pop ax
pop dx
ret
code ends
end start
此代码在DOSBox下运行的结果截图: