想要用0号中断做一些事情可是不知道为什么就直接退出程序了 求帮忙看看

谢,快乐 2019-07-17 03:40:21
assume cs:code,ds:data,ss:stack




data segment

db 'Divde error',0 ;使用程序的时候会被覆盖掉

data ends

stack segment stack

stack ends


code segment


start: mov ax,data
mov ds,ax
mov bx,0


call Cpy_nwe_init0
call set_new_int0

mov ax,0
mov dx,1
mov bx,1
div bx

mov ax,4C00H
int 21H
;============================================================================
set_new_int0:
mov bx,0 ;修改了 0号的段地址和偏移地址
mov es,bx

mov word ptr es:[0*4],7E00H ;设置的是Ip
mov word ptr es:[0*4+2],0 ;设置的是cs

ret

;============================================================================


new_init0: jmp newInt0

String: db 'divde error',0


newInt0: mov bx,0B800H
mov es,bx


mov bx,0
mov ds,bx

mov di,160*10 +30*2
;mov si,OFFSET String - new_init0 + 7E00H
mov si,7E03

Show_REt: mov dl,ds:[si] ;判断dl里的数据是不是等于0
jmp dl,0 ;如果等于0就跳转程序结束 因为 我们用到的是0号中断程序 所以 要重新写一个程序返回
je Show_String ;不等于0就把数据放到 es:[di]中 直到dl等于0
mov es:[di],dl
inc di
inc di
inc si
jmp Show_REt

Show_String: mov ax,4c00H
int 21

new_init0_end: nop


;============================================================================

Cpy_nwe_init0:
mov bx,cs
mov ds,bx
mov si,OFFSET new_init0

mov bx,0
mov es,bx
mov di,7E00H


mov cx,OFFSET new_init0_end - new_init0 ;用高减低 来获取两个标号位的差
Cld ;向上
rep movsb ;从 ds;[si] 复制字节型数据到 es:[di] 中, 每执行一次 si和di分别加上一(inc)
ret



code ends

end start

...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
婉拒达达利亚 2019-07-18
  • 打赏
  • 举报
回复
int 21少了H
婉拒达达利亚 2019-07-18
  • 打赏
  • 举报
回复
assume cs:code,ds:data,ss:stack

data segment
db 'Divde error',0 ;使用程序的时候会被覆盖掉
data ends

stack segment stack

stack ends

code segment
start:
mov ax,data
mov ds,ax
mov bx,0


call Cpy_nwe_init0
call set_new_int0

mov ax,0
mov dx,1
mov bx,1
div bx

mov ax,4C00H
int 21H

;============================================================================
set_new_int0:
mov bx,0 ;修改了 0号的段地址和偏移地址
mov es,bx

mov word ptr es:[0*4],7E00H ;设置的是Ip
mov word ptr es:[0*4+2],0 ;设置的是cs

ret

;============================================================================


new_init0:
jmp newInt0

String:
db 'divde error',0

newInt0:
mov bx,0B800H
mov es,bx

mov bx,0
mov ds,bx

mov di,160*10 +30*2
mov si,7E03H

Show_REt:
mov dl,ds:[si] ;判断dl里的数据是不是等于0
cmp dl,0 ;如果等于0就跳转程序结束 因为 我们用到的是0号中断程序 所以 要重新写一个程序返回
je Show_String ;不等于0就把数据放到 es:[di]中 直到dl等于0
mov es:[di],dl
inc di
inc di
inc si
jmp Show_REt

Show_String:
mov ax,4c00H
int 21h

new_init0_end: nop


;============================================================================

Cpy_nwe_init0:
mov bx,cs
mov ds,bx
mov si,OFFSET new_init0

mov bx,0
mov es,bx
mov di,7E00H

mov cx,OFFSET new_init0_end - new_init0 ;用高减低 来获取两个标号位的差
Cld ;向上
rep movsb ;从 ds;[si] 复制字节型数据到 es:[di] 中, 每执行一次 si和di分别加上一(inc)
ret

code ends
end start
zara 2019-07-17
  • 打赏
  • 举报
回复
dosbox 下正常的吧,屏幕中间显示了 divide zero 字样。可能不能在 debug 里的,debug 大概会自己接管 int00 吧,哪怕是在调试程序的时候。
谢,快乐 2019-07-17
  • 打赏
  • 举报
回复
那个cmp写错了,写成jmp了, 该回来了还是一样
谢,快乐 2019-07-17
  • 打赏
  • 举报
回复
那个cmp写错了,写成jmp了, 该回来了还是一样
谢,快乐 2019-07-17
  • 打赏
  • 举报
回复
那个cmp写错了,写成jmp了, 该回来了还是一样
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧