显示一行字符串的程序为什么会显示2行?
DATA SEGMENTdb 'welcome to masm!',0
DATA ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATA,ss:stack
START:
MOV dh,1 ;行号
MOV dl,1 ;列号
mov cl,2 ;颜色
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
stack segment ;建立栈空间
dw 0
stack ends
mov ax,stack
mov ss,ax
mov sp,2
mov al,0a0h ;一行有160个字节
mul dh ;ax保存第n行前的n行字节数
push ax
mov ax,0
mov dh,0 ;
mov al,dl
mov dl,2
mul dl ;ax保存第m列前的m列字节数
pop bx
add ax,bx ;行偏移地址加列偏移地址等于总偏移地址
push ax
pop bx
mov ax,0b800h ;段地址
mov es,ax
s: push cx
mov cl,[si]
mov ch,0
jcxz ok
pop cx
mov es:[bx+1],cl ;写入颜色
mov al,[si]
mov byte ptr es:[bx],al ;写入字符
add bx,2
inc si
jmp short s
ok: ret
CODES ENDS
END START
预计在第一行第一列(开始是第0列,第0行)写入"welcome to masm",结果第0行和第一行都写了该字符串,怎么回事?
王爽的汇编语言p206面第一小题
[此贴子已经被作者于2020-7-28 23:55编辑过]