配套汇编代码不理解

发布于 2022-09-03 07:54:01 字数 2286 浏览 13 评论 0

这是配套代码:

;代码清单5-1 
     ;文件名:c05_mbr.asm
     ;文件说明:硬盘主引导扇区代码
     ;创建日期:2011-3-31 21:15 
     
     mov ax,0xb800                 ;指向文本模式的显示缓冲区
     mov es,ax

     ;以下显示字符串"Label offset:"
     mov byte [es:0x00],'L'
     mov byte [es:0x01],0x07
     mov byte [es:0x02],'a'
     mov byte [es:0x03],0x07
     mov byte [es:0x04],'b'
     mov byte [es:0x05],0x07
     mov byte [es:0x06],'e'
     mov byte [es:0x07],0x07
     mov byte [es:0x08],'l'
     mov byte [es:0x09],0x07
     mov byte [es:0x0a],' '
     mov byte [es:0x0b],0x07
     mov byte [es:0x0c],"o"
     mov byte [es:0x0d],0x07
     mov byte [es:0x0e],'f'
     mov byte [es:0x0f],0x07
     mov byte [es:0x10],'f'
     mov byte [es:0x11],0x07
     mov byte [es:0x12],'s'
     mov byte [es:0x13],0x07
     mov byte [es:0x14],'e'
     mov byte [es:0x15],0x07
     mov byte [es:0x16],'t'
     mov byte [es:0x17],0x07
     mov byte [es:0x18],':'
     mov byte [es:0x19],0x07

     mov ax,number                 ;取得标号number的偏移地址
     mov bx,10

     ;设置数据段的基地址
     mov cx,cs
     mov ds,cx

     ;求个位上的数字
     mov dx,0
     div bx
     mov [0x7c00+number+0x00],dl   ;保存个位上的数字

     ;求十位上的数字
     xor dx,dx
     div bx
     mov [0x7c00+number+0x01],dl   ;保存十位上的数字
     ;求百位上的数字
     xor dx,dx
     div bx
     mov [0x7c00+number+0x02],dl   ;保存百位上的数字

     ;求千位上的数字
     xor dx,dx
     div bx
     mov [0x7c00+number+0x03],dl   ;保存千位上的数字

     ;求万位上的数字 
     xor dx,dx
     div bx
     mov [0x7c00+number+0x04],dl   ;保存万位上的数字

     ;以下用十进制显示标号的偏移地址
     mov al,[0x7c00+number+0x04]
     add al,0x30
     mov [es:0x1a],al
     mov byte [es:0x1b],0x04
     
     mov al,[0x7c00+number+0x03]
     add al,0x30
     mov [es:0x1c],al
     mov byte [es:0x1d],0x04
     
     mov al,[0x7c00+number+0x02]
     add al,0x30
     mov [es:0x1e],al
     mov byte [es:0x1f],0x04

     mov al,[0x7c00+number+0x01]
     add al,0x30
     mov [es:0x20],al
     mov byte [es:0x21],0x04

     mov al,[0x7c00+number+0x00]
     add al,0x30
     mov [es:0x22],al
     mov byte [es:0x23],0x04
     
     mov byte [es:0x24],'D'
     mov byte [es:0x25],0x07
      
   infi: jmp near infi                 ;无限循环
  
  number db 0,0,0,0,0

  times 203 db 0
        db 0x55,0xaa

请问代码中"设置数据段的基地址" 把cs的数据赋值给ds有什么用呢 cs和ds都是0x00;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

╰ゝ天使的微笑 2022-09-10 07:54:01

兄弟,后面取数据的时候我想问你基地址是多少,你写的是偏移值,懂不,所以需要设置数据基地址

无言温柔 2022-09-10 07:54:01

@hello2world 说的对,但是没有对代码进行解释,那我就来说两句。
代码如下:

 ;设置数据段的基地址
 mov cx,cs
 mov ds,cx

 ;求个位上的数字
 mov dx,0
 div bx
 mov [0x7c00+number+0x00],dl   ;保存个位上的数字

第8行的mov指令目的操作数[0x7c00+number+0x00]中括号内指定是内存单元的段内偏移量,相对的段基地址默认使用ds寄存器,所以在这行代码前需要先设置好ds。将csds设置成一样,是因为数据和代码段是共用的。区别与这种写法的是mov byte [es:0x00],'L',使用段超越前缀,基地址使用es寄存器。

归途 2022-09-10 07:54:01

都没人会汇编啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文