汇编语言 第十章 实验题第三题 遇到无效指令
本帖最后由 shenyuan 于 2015-3-16 22:26 编辑DATAS SEGMENT
dw 123,12666,1,8,3,38
db 30 dup(0)
DATAS ENDS
STACKS SEGMENT
dw 10 dup(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,STACKS
mov ss,ax
mov sp,20
; 初始化数据段和栈段
mov di,0
mov ax,
mov si,12 ;参数赋值
;参数=(ax) 存放地址=ds:
call dtoc
MOV AH,4CH
INT 21H
dtoc:
mov bx,10
sr: mov dx,0
div bx
push dx ; 把余数压栈
mov cx,ax
jcxz okd ;判断商是否为0
jmp sr
okd: mov ax,20
sub ax,sp
mov bl,2
div bl
mov cl,al
mov ch,0; 以上为计算栈中元素的数目, (20-sp)/2
s1:pop ax
add al,30H
mov ,al
inc si
loop s1
mov byte ptr ,0
ret
CODES ENDS
END START
以上为汇编代码,我在进行单步调试的时候,总是在 第二次循环到 mov cx,ax的时候弹出如下
并且点击忽略继续弹出,一下为debug的截图,我的环境是xp虚拟机,已经重启过几次,所以确定不是偶然出现的。
Anyone has any idea about what causes the problem, answer me.Thank you,{:9_241:}希望有人可以到自己那边的环境测试一下,看看有没有出现同样的问题
本帖最后由 shenyuan 于 2015-3-16 22:26 编辑
调试了一晚上,用栈顶来计算压栈的方法容易出错,忘记了 call调用的时候进行了push ip 的操作,所以 元素数目应该是 减一的{:9_220:}DATAS SEGMENT
dw 123,12666,1,8,3,38
db 30 dup(0)
DATAS ENDS
STACKS SEGMENT
dw 10 dup(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,STACKS
mov ss,ax
mov sp,20
; 初始化数据段和栈段
mov di,0
mov ax,
mov si,12 ;参数赋值
;参数=(ax) 存放地址=ds:
call dtoc
MOV AH,4CH
INT 21H
dtoc:
mov bx,10
sr: mov dx,0
div bx
push dx ; 把余数压栈
mov cx,ax
jcxz okd ;判断商是否为0
jmp sr
okd: mov ax,20
sub ax,sp
mov bl,2
div bl
<font color="#ff0000"> dec al</font>
mov cl,al
mov ch,0; 以上为计算栈中元素的数目, (20-sp)/2
s1:pop ax
add al,30H
mov ,al
inc si
loop s1
mov byte ptr ,0
ret
CODES ENDS
END START
页:
[1]