编写子程序,显示字符串
October 8, 2013
masm
在屏幕的8行3列,用绿色显示data段中的字符串。
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 ax, 4c00h
int 21h
show_str:
push dx
push cx
;row
dec dh
mov al, 0a0h
mul dh
push ax
;col
dec dl
mov al, 2h
mul dl
pop bx
add ax, bx
mov di, 0b800h
mov es, di
mov bp, ax
mov bl, cl
change:
mov cl, [si]
mov ch, 0
jcxz ok
mov di, si
add di, di
mov al, ds:[si]
mov byte ptr es:[bp+di], al
mov byte ptr es:[bp+di+1], bl
inc si
jmp short change
ok:
pop cx
pop dx
ret
code ends
end start
开始遇到了很奇怪的bug,最终还是不知道为什么,所以换了一种方式解决问题了。
那个bug是:内存地址一样的位置,数据竟然不一样: 这两行地址不一样吗?为什么呢? 为什么数据不同呢? 后来又遇到了一个bug,就是si的增长方式和在es和ds中是不一样的,所以要用寄存器 di 临时作为es段中的偏移量。
虽然搞了很久,但最终还是搞出来了=_=