实验10
下面是王爽汇编实验10.1的答案 :在屏幕指定的行列 输出数据段的一串字符
程序代码:
assume cs:code, ds:data
data segment
db 'Welcome to masm!', 0
data ends
code segment
start: mov dh, 8
mov dl, 3
mov cl, 2
mov ax, data
mov ds, ax
mov si, 0
call show_str
mov ah, 1
int 21h
mov ax, 4c00h
int 21h
show_str:
push ax
push bx
push es
push si
mov ax, 0b800h
mov es, ax
mov ax, 160
mul dh ; ax = 160 * dh
mov bx, ax ; save ax
mov ax, 2
mul dl ; ax = dl * 2
add bx, ax ; bx = (160 * dh + 2 * dl) head address
mov al, cl
mov cl, 0
show0:
mov ch, [si]
jcxz show1
mov es:[bx], ch
mov es:[bx].1, al
inc si
add bx, 2
jmp show0
show1:
pop si
pop es
pop bx
pop ax
ret
code ends
end start程序能正常运行 并且俺看到了结果 就是想问下 在show_str子程序里为什么要用4个push把寄存器入栈 然后再在show1里pop出来 看了下show_str的过程 貌似不入栈也无影响吧 难道int 21h 需要原始的寄存器数据?






我是来蹭分的