淡然如水 发表于 2012-3-15 20:37:02

汇编新手的一个简单问题

本帖最后由 淡然如水 于 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

阿__彭 发表于 2012-3-15 20:37:03

1:b8应该是对应的mov的机器码。这个你不用管,我觉得作者前面老是把汇编指令与对应的机器码都写出来了
2:代码是存放在 123B0H----123B9H 的一组内存单元中   这里是假设啊,假设这些代码存放的内存单元的地址范围

淡然如水 发表于 2012-3-15 21:08:27

阿__彭 发表于 2012-3-15 21:00 static/image/common/back.gif
1:b8应该是对应的mov的机器码。这个你不用管,我觉得作者前面老是把汇编指令与对应的机器码都写出来了
2: ...

:L,看来是我钻牛角尖了

阿__彭 发表于 2012-3-15 21:13:26

淡然如水 发表于 2012-3-15 21:08 static/image/common/back.gif
,看来是我钻牛角尖了

刚开始学有这种精神挺好的。但是不要过了。要分清哪些是需要专研的。一起学习吧。我才看到第五章

淡然如水 发表于 2012-3-15 21:24:50

{:5_110:}{:5_110:}

晨枫 发表于 2012-3-15 23:18:13

b8应该就是指mov ax,****,至于哪来的,呵呵,机器语言就是这样规定的,B8就完成这样的功能;你的问题二说的这段代码应该是只是在举例,就是指一段内存而已。

wAterLoo 发表于 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之间的内存了

希望能对你有所帮助

   

淡然如水 发表于 2012-3-16 09:24:55

wAterLoo 发表于 2012-3-16 05:44 static/image/common/back.gif
mov ax,0000    (B8 00 00)
add ax,0123    (05 23 01)
B8,05 是机器指令 B8 是指 把一个数的值送入AX
...

非常感谢{:5_106:}

淡然如水 发表于 2012-3-16 13:25:06

阿__彭 发表于 2012-3-15 21:00 static/image/common/back.gif
1:b8应该是对应的mov的机器码。这个你不用管,我觉得作者前面老是把汇编指令与对应的机器码都写出来了
2: ...

这个问题怎么还是未解决,怎么没有采取某答案的按键?

柳bb 发表于 2012-3-16 15:04:56

B8中隐含了mov和ax,至于存储单元是假设

天空好蓝 发表于 2012-3-17 01:30:20

淡然如水 发表于 2012-3-15 21:08 static/image/common/back.gif
,看来是我钻牛角尖了

我也觉得是这样,,先不要管,,,,继续往下看 学习把

不会编汇编 发表于 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 的意思,大概就是代码数据段
页: [1]
查看完整版本: 汇编新手的一个简单问题