![]() |
#2
pangding2012-08-13 13:20
|

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 需要原始的寄存器数据?