首页 > 代码库 > 关于汇编地址分配的疑惑

关于汇编地址分配的疑惑

使用王爽著的《汇编语言》开始自己的汇编之旅,遇到一些疑惑,记录下来,看以后会不会解惑。

 1 assume cs:codesg,ds:datasg 2 datasg segment 3   db ibm           4   db dec           5   db dos           6   db vax           7   dw ‘agn          ‘;(其后添不添加dw 0结果都是一样的) 8 datasg ends 9 10 codesg segment11   start:mov ax,datasg12      mov ds, ax13      mov bx, 014      mov cx, 415   s0: mov ds:[40h], cx16       mov si, 017       mov cx, 318   s:  mov al, [bx+si]19       and al, 11011111b20       mov [bx+si], al21       inc si22       loop s23 24       add bx, 1625       mov cx, ds:[40h]26       loop s027 28       mov ax, 4c00h29       int 21h30 31 codesg ends32 end start

一段比较简单的代码(ml.exe /Zm /c ,link16.exe后),在dos里debug

技术分享

技术分享

自己的理解:

      ds:系统分配的内存空间首地址(如图15550-1564F是调用函数的一系列操作指令)

      es:未显式分配,则和ds一致

      ss:未显式分配,程序源码段开始地址(datasg)

      cs:程序代码段开始(codesg)

比较困惑的是在datasg结束后,没有直接开始codesg,而是在内存中插入0,算是使codesg对齐么?不懂是不是代码起始地址必须要16字节对齐。

      

关于汇编地址分配的疑惑