当前位置: 代码迷 >> 汇编语言 >> 急小疑点,求解答
  详细解决方案

急小疑点,求解答

热度:1484   发布时间:2013-02-26 00:00:00.0
急。。小问题,求解答
汇编里要求吧首地址为BLOCK的字数组第6个字送出,MOV BX,OFFSET [BLOCK] [OAH]这样写是什么意思?有何用意?本人是初学者,求助。。

------解决方案--------------------------------------------------------
把BLOCK变量的地址加上10,就是第六个字的偏移地址送BX寄存器。
------解决方案--------------------------------------------------------
MOV BX,OFFSET [BLOCK] [OAH]
这里的OFFSET是表示BLOCK的偏移地址,OFFSET [BLOCK] [OAH]表示BLOCK的偏移地址加上0ah,
即BLOCK的偏移地址后面的第12个内存地址,
MOV BX,OFFSET [BLOCK] [OAH]
就是第六个字的偏移地址中的内容送到BX寄存器。
------解决方案--------------------------------------------------------
Assembly code
dw 0000 0001 0002 0003 0004 0005 0006 0007内存如下:0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00mov bx, [block][0ah] == mov bx, [block + 0ah]
------解决方案--------------------------------------------------------
不得不说,MASM在地址表达上实在垃圾,不如NASM。
------解决方案--------------------------------------------------------
[Quote=引用:]

引用:
Assembly code


dw 0000 0001 0002 0003 0004 0005 0006 0007
内存如下:
0 1 2 3 4 5 6 7 8 9 A B C D E F
00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00
mov……
[/Quote]
不一样……方括号的优先级高于offset
offset是获得偏移比如:
[code=Assembly]
block dw 0000 0001 0002 0003 0004 0005 0006 0007
内存如下:
0 1 2 3 4 5 6 7 8 9 A B C D E F
00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00[/code]
mov ax, offset [block][2] ; ax等于2,应为获得是偏移
mov ax, [block][2] ; ax等于0001,即0002偏移处的字数据
------解决方案--------------------------------------------------------
offset是masm的伪指令,意思是将有效地址装入目标寄存器中。
  相关解决方案