. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  怎么查看下面数的偏移量?  [已解决] 回复[ 5次 ]   点击[ 304次 ]  
hzd1990
[帖 主]   [ 发表时间: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的偏移量分别是多少?
 怎样试验运行出来,然后再查看?
scuzg
[第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
hzd1990
[第2楼]   [ 回复时间:2009-10-26 21:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:20
注册日期:2009-10-19 12:21
不用编译,直接可以算出来吗?怎么算  谢谢了
scuzg
[第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

偏移量计算就很简单了:挨个加就是了。上表最后一列就是计算出的各变量的偏移量。
hzd1990
[第4楼]   [ 回复时间:2009-10-26 22:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:20
注册日期:2009-10-19 12:21
回复:[第3楼]
------------------
太谢谢了!
再问一下你:你在定义堆栈段的时候    dw         40h dup(0)  40是怎么来的?是不是要通过计算?
hzd1990
[第5楼]   [ 回复时间:2009-10-26 22:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:20
注册日期:2009-10-19 12:21
此贴由 贴主 于 [ 2009-10-26 22:40 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(scuzg):4分   3楼(scuzg):4分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved