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