|
主题 : : 怎么查看下面数的偏移量? [已解决] |
回复[ 5次 ]
点击[ 304次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-10-25 18:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:20
注册日期:2009-10-19 12:21 |
m1 db 15,67h,11110000b,?
m2 db '15','ab$'
m3 dw 4*5
m4 dd 1234h
m5 db 2 dup(5,'a')
m6 dw m2
m7 dd m2
m1的偏移量是0000H m2的偏移量是0004H ,m3、m4、m5、m6、m7的偏移量分别是多少?
怎样试验运行出来,然后再查看? | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-10-25 23:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46 |
在代码段下如下述简单代码:
mov al,m1
mov al,m2
mov ax,m3
les ax,m4
mov al,m5
mov ax,m6
les ax,m7
编译后,观察上述指令反汇编代码的源操作数即可:
cs:0005 A00000 mov al,[0000]
cs:0008 A00400 mov al,[0004]
cs:000B A10900 mov ax,[0009]
cs:000E C4060B00 les ax,[000B]
cs:0012 A00F00 mov al,[000F]
cs:0015 A11300 mov ax,[0013]
cs:0018 C4061500 les ax,[0015]
完整源代码如下:
stack0 segment stack 'stack'
dw 40h dup(0)
stack0 ends
data segment
m1 db 15,67h,11110000b,?
m2 db '15','ab$'
m3 dw 4*5
m4 dd 1234h
m5 db 2 dup(5,'a')
m6 dw m2
m7 dd m2
data ends
code segment
assume cs:code,ds:data,ss:stack0
main: mov ax,data
mov ds,ax
mov al,m1
mov al,m2
mov ax,m3
les ax,m4
mov al,m5
mov ax,m6
les ax,m7
mov ah,4ch
int 21h
code ends
end main | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-10-26 21:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:20
注册日期:2009-10-19 12:21 |
|
|
|
|
|
[第3楼]
[ 回复时间:2009-10-26 22:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46 |
因为楼主问题中有“怎样试验运行出来,然后再查看?”,所以我通过编译后的反汇编代码来解释。
人工计算也很简单,可以先计算出每个变量分配的字节数:
m1 db 15,67h,11110000b,? 4 0
m2 db '15','ab$' 5 4
m3 dw 4*5 2 9
m4 dd 1234h 4 b
m5 db 2 dup(5,'a') 4 f
m6 dw m2 2 13h
m7 dd m2 4 15h
偏移量计算就很简单了:挨个加就是了。上表最后一列就是计算出的各变量的偏移量。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-10-26 22:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:20
注册日期:2009-10-19 12:21 |
回复:[第3楼]
------------------
太谢谢了!
再问一下你:你在定义堆栈段的时候 dw 40h dup(0) 40是怎么来的?是不是要通过计算? | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-10-26 22:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:20
注册日期:2009-10-19 12:21 |
此贴由 贴主 于 [ 2009-10-26 22:40 ] 结贴。 结贴原因:问题已解决 | | |
|