2 ouerhuilaikankan OuErHuiLaiKanKan 于 2015.07.22 15:00 提问

8086汇编语句出错

assume cs:code
data segment
db 'abcde',0
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:mov dh,0
mov dl,0
mov cl,2
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov di,0
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:mov ch,0
push cx ;!!!
mov cl,ds:[di]
jcxz excout
mov al,0A0h
mul dh
mov bx,ax
mov al,2h
mul dl
add bx,ax
mov al,ds:[di]
mov es:[bx+si],al
pop cx ;!!!
mov es:[bx+si+1],cl ;把感叹号处去掉,此处cl换成2便可运行成功,但是cl是作为传入参数
add di,1
add si,2
jmp short show_str
excout:ret
code ends
end start

好像是cx的问题

4个回答

OuErHuiLaiKanKan
OuErHuiLaiKanKan   2015.07.24 10:51
已采纳

我自己解决了,是push cx后jcxz excout的pop ip取到了cx的值

suiyunonghen
suiyunonghen   2015.07.22 15:42

注意cl的内容是低寄存器,不是整个寄存器,需要转换用ptr byte修饰一下吧

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.07.22 20:49

楼上说的对,取出值的时候,注意位数可能会带来的数据缺失

sina_2831808769
sina_2831808769   Rxr 2015.07.25 13:56

我自己解决了,是push cx后jcxz excout的pop ip取到了cx的值

Csdn user default icon
上传中...
上传图片
插入图片