-
问题内容:一个初学的问题,关于字符串显示
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4539446
- 所属论坛:汇编语言
审核组:其他开发语言
- 提问者:bestee
解决者:mydo
- 感谢:NeoZero
- 关键字:其他开发语言 汇编语言
- 答案:
_DATA SEGMENT
MSG1 DB 'MESSAGE 1 $'
MSG2 DB 'MESSAGE 2 $'
_DATA ENDS
_CODE SEGMENT
ASSUME CS:_CODE,DS:_DATA
START: MOV AX,_DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,09H
INT 21H
MOV DL,0DH
INT 21H
MOV AH,02H
INT 21H
MOV DL,0AH
INT 21H
MOV AH,02H
INT 21H
MOV AH,01H
INT 21H
MOV AH,4CH
INT 21H
_CODE ENDS
END START
为什么结果是MESSAGE 1 SSAGE 2 ?
我把回车和显示写成子程序就没有这种情况,谢谢了!
---------------------------------------------------------------
MOV DL,0DH
INT 21H
你要实现什么效果,这里将 dx 的低位加了偏移 0dh(原来为 0),他指向 MSG2
中的 'SSAGE 2',然后你又用 int 21h 将其输入,当然为 MESSAGE 1 SSAGE 2
了,请自己用 debug 跟踪。
---------------------------------------------------------------
对于16bit来说,中断向量表指的是0000:0000~0000:03ff这一段。bios会在开机的时候在这里写一部分中断的入口地址,并提供中断服务程序。int 21h是由DOS操作系统提供的。而进入32bit以后就要由idtr提供的基址找idt的位置。操作系统在加载的初期会用一些bios中断,当进入32bit以后一般覆盖原中断表,在适当的地方重写中断,比如linux的系统调用int 80h。
- 评价:
给朵鲜花(0)
扔个鸡蛋(4)