CSDN=>FAQ=>FAQ 展示
  • 问题内容:一个初学的问题,关于字符串显示
  • 原讨论链接: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)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo