内中断

weikaty 2013-03-22 05:10:32
那个王爽 那本书上的内中断代码,可以自己设置内中断,自己也设置也,查看内存处0000:0000处的内容也是我设置的内容,但运行王爽那个内中断代码死都不出来divide error这个字符。
最后执行完输出 Program terminated normally!

我用的工具是masm5.0

代码如下
assume cs:code

code segment
start:
mov ax,cs
mov ds,ax
mov si,offset do0 ;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,200h ;设置es:di指向源地址
mov cx,offset do0end - offset do0 ;设置cx为传输长度
cld ;设置传输方向为正
rep movsb
;mov ax,0

;mov es,ax
mov word ptr es:[0*4],200h ;设置中断向量的入口地址的偏移地址
mov word ptr es:[0*4+2],0 ;设置中断向量的入口地址的段地址
mov ax,0f000h
mov dx,22d
mov cx,10d
div cx ;此4句是为了做个溢出的除法
mov ax,4c00h
int 21h
do0: jmp short do0start
db "divide error!"
do0start:
mov ax,cs
mov ds,ax
mov si,202h ;设置ds:si指向字符串
mov ax,0B800h
mov es,ax
mov di,12*0A0h+2*32 ;设置es:di指向显存空间的中间位置
mov cx,13d ;设置字符串长度
s: mov al,[si]
mov es:[di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h

do0end: nop

code ends
end start
...全文
152 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
NeDong 2013-03-23
  • 打赏
  • 举报
回复
程序没有错误,而且可以运行,显示的字符串是在屏幕的中间,你可能是没看到。运行.EXE文件之前,敲一下cls命令
cpuzer 2013-03-23
  • 打赏
  • 举报
回复
mov ax,4c00h,AL是0,相当于return 0,所以是 Program terminated normally!,AL改成其他值就会非正常结束进程
cpuzer 2013-03-23
  • 打赏
  • 举报
回复

这不是吗~

21,497

社区成员

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

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