鱼C论坛

 找回密码
 立即注册
查看: 2075|回复: 3

王爽 汇编语言 实验13第二题

[复制链接]
发表于 2013-10-20 23:55:44 | 显示全部楼层 |阅读模式
10鱼币
assume cs:code                                 ;安装int 7c00h中断例程

code segment 
start: mov ax, 0
    mov es, ax
    mov di, 200h
 
     mov ax, code
     mov ds, ax
     mov si, offset ip

     mov cx, offset ipend-offset ip 
     cld
     rep movsb 

     mov ax,0 
     mov es, ax 
     mov word ptr es:[7ch*4],200h
     mov word ptr es:[7ch*4+2],0

     mov ax, 4c00h
     int 21h

ip: push bp
     mov bp, sp
     dec cx
     jcxz ipret
     add [bp+2],bx
     ipret: pop bp
     iret


ipend: nop 

code ends
end start 
一下代码为书上的
 
assume cs:code

code segment 

start:mov ax, 0b800h
       mov es, ax
       mov di, 160*12

       mov bx, offset se-offset s
       mov cx, 80

s:      mov byte ptr es:[di],'!'

        mov byte ptr es:[di+1],2
        add di, 2
        int 7ch
se:   nop 

        mov ax, 4c00h
        int 21h
code ends
end start
目的是在屏幕中间显示80个‘!’
以下是运行结果
要么
QQ截图20131020234938.png
要么就是直接关闭。。。。反正就是达不到预期目标
不懂错哪。。。

最佳答案

查看完整内容

栈越界,可能发生异常,在这里正常工作。 逻辑错误出现在add , bx处。 观察调试结果,可以得出此处应为sub , bx 因为偏移是往前面偏移,而不是后面。 emu8086调试结果 关于无效指令是由于你在windows下安装中断是不被允许的 windows下的保护机制涉及到80386CPU的一些特性 windows的保护机制规定某些地址是不可以被改变的 如果必须要在windows下运行,DOSBOX可以实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-20 23:55:45 | 显示全部楼层
栈越界,可能发生异常,在这里正常工作。

逻辑错误出现在add [bp+2], bx处。
观察调试结果,可以得出此处应为sub [bp+2], bx
因为偏移是往前面偏移,而不是后面。
emu8086调试结果

关于无效指令是由于你在windows下安装中断是不被允许的
windows下的保护机制涉及到80386CPU的一些特性
windows的保护机制规定某些地址是不可以被改变的
如果必须要在windows下运行,DOSBOX可以实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-21 12:34:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 11:18:39 | 显示全部楼层
书上代码就没有这一句“mov byte ptr es:[di+1],2”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 16:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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