鱼C论坛

 找回密码
 立即注册
查看: 3061|回复: 11

汇编新手的一个简单问题

[复制链接]
发表于 2012-3-15 20:37:02 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 淡然如水 于 2012-3-20 12:28 编辑

问题来源:《汇编语言 第二版》第2章 2.12 代码段
书中的例子内容:
  mov ax,0000    (B8 00 00)
  add ax,0123    (05 23 01)
  Mov bx,ax      (8B D8)
  jmp bx         (FF E3)
   这段长度为10字节的指令,存放在 123B0H---123B9H 的一组内存单元中,我们就可以认为,123B0H---123B9H 这段内存是用
   来放代码的,是一个代码段,它的段地址为 123BH,长度为10个字节。
以上绿色字部分的内容为书中的原内容。
问题1:  mov ax,0000    (B8 00 00) ,mov指令后括号中的内容"B8"是指什么?哪来的?
问题2:  为什么说这段 代码是存放在 123B0H----123B9H 的一组内存单元中?或是说这里只是在举例,胡乱写 组内存单元吗?
今天学到这里,困惑了很久,希望有懂的朋友帮一下忙。:handshake

最佳答案

查看完整内容

1:b8应该是对应的mov的机器码。这个你不用管,我觉得作者前面老是把汇编指令与对应的机器码都写出来了 2:代码是存放在 123B0H----123B9H 的一组内存单元中 这里是假设啊,假设这些代码存放的内存单元的地址范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-15 20:37:03 | 显示全部楼层
1:b8应该是对应的mov的机器码。这个你不用管,我觉得作者前面老是把汇编指令与对应的机器码都写出来了
2:代码是存放在 123B0H----123B9H 的一组内存单元中   这里是假设啊,假设这些代码存放的内存单元的地址范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-15 21:08:27 | 显示全部楼层

:L,看来是我钻牛角尖了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-15 21:13:26 | 显示全部楼层
淡然如水 发表于 2012-3-15 21:08
,看来是我钻牛角尖了

刚开始学有这种精神挺好的。但是不要过了。要分清哪些是需要专研的。一起学习吧。我才看到第五章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-15 21:24:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-15 23:18:13 | 显示全部楼层
b8应该就是指mov ax,****,至于哪来的,呵呵,机器语言就是这样规定的,B8就完成这样的功能;你的问题二说的这段代码应该是只是在举例,就是指一段内存而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-16 05:44:25 | 显示全部楼层
本帖最后由 wAterLoo 于 2012-3-16 05:45 编辑

mov ax,0000    (B8 00 00)
add ax,0123    (05 23 01)
B8,05 是机器指令 B8 是指 把一个数的值送入AX
05 就是说把一个数字和AX相加 并把值存入AX
也就是CPU和程序做了一个约定
如果程序使用B8H这个字节,那么CPU就执行 把操作数传入AX
如果程序使用 05H这个字节 ,那么CPU就执行 把操作数和AX相加,并把值存入AX

你如果想查看代码段所处的位置,你可以用DEBUG调试你的程序
进入DEBUG后,你可以按u来查看代码段
这是我从DEBUG拷贝过来的一段代码
0B71:0000 B8710B        MOV     AX,0B71
0B71:0003 8ED8          MOV     DS,AX
0B71:0005 B82000        MOV     AX,0020
那么这段代码就是位于0b71h --> 0b76之间的内存了

希望能对你有所帮助

   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-16 09:24:55 | 显示全部楼层
wAterLoo 发表于 2012-3-16 05:44
mov ax,0000    (B8 00 00)
add ax,0123    (05 23 01)
B8,05 是机器指令 B8 是指 把一个数的值送入AX
...

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-16 13:25:06 | 显示全部楼层
阿__彭 发表于 2012-3-15 21:00
1:b8应该是对应的mov的机器码。这个你不用管,我觉得作者前面老是把汇编指令与对应的机器码都写出来了
2: ...

这个问题怎么还是未解决,怎么没有采取某答案的按键?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-16 15:04:56 | 显示全部楼层
B8中隐含了mov和ax,至于存储单元是假设
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-17 01:30:20 | 显示全部楼层
淡然如水 发表于 2012-3-15 21:08
,看来是我钻牛角尖了

我也觉得是这样,,先不要管,,,,继续往下看 学习把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-17 19:17:03 | 显示全部楼层
首先问题1:  mov ax,0000  这段是汇编代码,是人类为了方便编程而发明的简单易懂的语言,后边 (B8 00 00) 括号里的东西计算机可以读懂的机器代码,因为这段B8 00 00是16进制数,转化为2进制的数就是计算机可以读懂的代码。 B8 就是 mov ax 对应的机器码

问题2:这段代码你在你的机器上的debug里边运行的时候,计算机会自己给他分配一个内存地址来存放这段代码,而因为每台计算机的不同,这段分配的地址也是不一样的,所以只有在你自己的计算机上,你就可以看到这段内存单元,就是debug时候 CS= XXX 的数值 ,CS是 code sigma 的意思,大概就是代码数据段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 22:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表