首页 > 代码库 > 关于汇编地址分配的疑惑
关于汇编地址分配的疑惑
使用王爽著的《汇编语言》开始自己的汇编之旅,遇到一些疑惑,记录下来,看以后会不会解惑。
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字节对齐。
关于汇编地址分配的疑惑
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。