Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1628776
  • 博文数量: 185
  • 博客积分: 10363
  • 博客等级: 上将
  • 技术积分: 2205
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-11 22:29
文章分类
文章存档

2013年(12)

2012年(5)

2011年(2)

2010年(12)

2009年(9)

2008年(15)

2007年(48)

2006年(82)

分类: WINDOWS

2006-06-05 11:12:17

4.4 深度思考
4.4.1 是不是数据必须放数据段,代码必段放代码段呢?
答,代码必段放代码段,否则你怎么执行呀?但数据也可以放到代码段,只是程序要作修改。
code SEGMENT
      ASSUME CS:code
      msg DB 'Hello, Mr.286.$'
start:MOV AX,code
      MOV DS,AX
      lea dx,msg
      mov ah,9h
      int 21h
      MOV AX,4C00h
      INT 21h
code ENDS
END start
编译后仍然可以。
4.4.2 我编的程序在内存中是什么样子的呢?
------------------------------------------------------------------------
E:\Download\Masm>debug hello286.exe
-u
1420:0000 B81F14        MOV    AX,141F
1420:0003 8ED8          MOV    DS,AX
1420:0005 8D160000      LEA    DX,[0000]
1420:0009 B409          MOV    AH,09
1420:000B CD21          INT    21
1420:000D B8004C        MOV    AX,4C00
1420:0010 CD21          INT    21
1420:0012 FF362421      PUSH    [2124]
1420:0016 E87763        CALL    6390
1420:0019 83C406        ADD    SP,+06
1420:001C FF362421      PUSH    [2124]
-d 141f:0000 L20
141F:0000  48 65 6C 6C 6F 2C 20 4D-72 2E 32 38 36 2E 24 00  Hello, Mr.286.$.
141F:0010  B8 1F 14 8E D8 8D 16 00-00 B4 09 CD 21 B8 00 4C  ............!..L
-q

E:\Download\Masm>
------------------------------------------------------------------------------
上面是什么呀?,还记得前面说的吗?
1420:0000 B81F14        MOV    AX,141F
  |  |      |          |          |
段址:偏址 机器语言      mov指令 把段地址的地址(141f)赋值给AX寄存器。

1420:0012后面的是垃圾数据,不用管它,把上面程序与源程序作一个比较,看有什么不用,差别在于把标号语言转成实际地址了。
程序前两行一执行,数据段地址就变成了141f,而那个字符串偏移地址在0000,由(LEA    DX,[0000]看出),所以我用-d 141f:0000 L20(后面L20表示只显示20个字节),就能把段地址显示出来了。
所以刚才的程序在内存中就变成了:
141f:0000 Hello, Mr.286.$  ----->这是段地址里的内存
1420:0000 B81F14        MOV    AX,141F  ------>这是代码段里的内存。data变成了实际地址
1420:0003 8ED8          MOV    DS,AX
1420:0005 8D160000      LEA    DX,[0000] ------>偏址变成了0000,因为实际上msg也就是从头开始的。当然是0了。
1420:0009 B409          MOV    AH,09    ------->注意Debug里,默认的是十六进制
1420:000B CD21          INT    21
1420:000D B8004C        MOV    AX,4C00
1420:0010 CD21          INT    21

阅读(2683) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~