鱼C论坛

 找回密码
 立即注册
查看: 1700|回复: 1

汇编语言 第十章 实验题第三题 遇到无效指令

[复制链接]
发表于 2015-3-16 18:44:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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,[di]
    mov si,12 ;参数赋值
    ;参数=(ax) 存放地址=ds:[si]
    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 [si],al
         inc si
         loop s1
         mov byte ptr [si],0         
    ret

CODES ENDS
    END START


以上为汇编代码,我在进行单步调试的时候,总是在 第二次循环到 mov cx,ax的时候弹出如下
wuxiao.png

并且点击忽略继续弹出,一下为debug的截图,我的环境是xp虚拟机,已经重启过几次,所以确定不是偶然出现的。
debug.png

Anyone has any idea about what causes the problem, answer me.Thank you,希望有人可以到自己那边的环境测试一下,看看有没有出现同样的问题

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-16 22:24:37 | 显示全部楼层
本帖最后由 shenyuan 于 2015-3-16 22:26 编辑

调试了一晚上,用栈顶来计算压栈的方法容易出错,忘记了 call调用的时候进行了push ip 的操作,所以 元素数目应该是 减一的
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,[di]
    mov si,12 ;参数赋值
    ;参数=(ax) 存放地址=ds:[si]
    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 [si],al
         inc si
         loop s1
         mov byte ptr [si],0         
    ret

CODES ENDS
    END START


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 20:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表