社区
汇编语言
帖子详情
请教关于偏移地址的问题
kanlejiuhao
2005-06-05 11:43:41
如下程序(可正常编译、运行):
.MODEL SMALL
.DATA
BUF DB '0123456789'
.CODE
MAIN:
MOV AX,@DATA
MOV DS,AX
LEA DX,BUF ;问题在这里
MOV AH,4CH
INT 21H
END MAIN
当运用debug查看结果时,其中的 LEA DX,BUF 被转换为 LEA DX,[000E]
但我认为应该是 LEA DX,[0000] 才对,请问为什么是 [000E]?
...全文
304
7
打赏
收藏
请教关于偏移地址的问题
如下程序(可正常编译、运行): .MODEL SMALL .DATA BUF DB '0123456789' .CODE MAIN: MOV AX,@DATA MOV DS,AX LEA DX,BUF ;问题在这里 MOV AH,4CH INT 21H END MAIN 当运用debug查看结果时,其中的 LEA DX,BUF 被转换为 LEA DX,[000E] 但我认为应该是 LEA DX,[0000] 才对,请问为什么是 [000E]?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
VxD1
2005-06-16
打赏
举报
回复
段组的问题,编译器把代码段放在数据段的前面了
phpsessid
2005-06-14
打赏
举报
回复
up
phpsessid
2005-06-06
打赏
举报
回复
在精简small内存模型和完整汇编格式中,他们的段定义是不同的,可以看出完整格式的数据段和指令段是分开,而small模型是混合在一起的,请搂主在debug的时候自行察看第一条指令的不同。
偶的flash还没有做,先闪咯。。。
phpsessid
2005-06-06
打赏
举报
回复
首先先道个歉,我主观猜测“使用small模型方式编制会占用前000d个地址”是错误的。
在经过试验以后得出如下结论:
1,使用各种内存模型方式的结果相同。
2,OFFSET指令将后面的BUF的偏移地址作为立即数回送给指令,而在执行时则将该偏移地址装入寄存器中,与LEA等价。
3,在只有LEA的指令的那个程序中,debug指令分配如下:
;1405:0000 B80514 MOV AX,1405
;1405:0003 8ED8 MOV DS,AX
;1405:0005 8D160E00 LEA DX,[000E]
;1405:0009 B44C MOV AH,4C
;1405:000B CD21 INT 21
1405:000D 0030 ADD [BX+SI],DH
1405:000F 3132 XOR [BP+SI],SI
1405:0011 3334 XOR SI,[SI]
1405:0013 353637 XOR AX,3736
1405:0016 3839 CMP [BX+DI],BH
这些指令在内存中分配如下:
B8 05 14 8E D8 8D 16 0E - 00 B4 4C CD 21 00 30 31
32 33 34 35 36 37 38 39
其中000E指向了 30 这条数据,正确。
4,在只有MOV的指令中,
1405:0000 B80514 MOV AX,1405
1405:0003 8ED8 MOV DS,AX
1405:0005 BA0C00 MOV DX,000C
1405:0008 B44C MOV AH,4C
1405:000A CD21 INT 21
1405:000C 3031 XOR [BX+DI],DH
1405:000E 3233 XOR DH,[BP+DI]
1405:0010 3435 XOR AL,35
1405:0012 36 SS:
1405:0013 37 AAA
1405:0014 3839 CMP [BX+DI],BH
内存数据:
B8 05 14 8E D8 BA 0C 00 - B4 4C CD 21 30 31 32 33
000C指向30 同样正确。
5,两指令同时存在情况下debug第一条指令为:MOV AX,1406 而不是MOV AX,1405 这是造成差异的原因。
6,可以看出,LEA和MOV offset指令的指令长度不同。。
phpsessid
2005-06-05
打赏
举报
回复
dataare segment
BUF DB '01234567891'
dataare ends
code segment
assume cs:code,ds:dataare
MAIN PROC FAR
start:
MOV AX,dataare
MOV DS,AX
LEA DX,BUF ;问题在这里
MOV AH,4CH
INT 21H
MAIN ENDP
code ends
END start
这样buf的偏移地址为0000,使用small模型方式编制会占用前000d个地址
大熊猫侯佩
2005-06-05
打赏
举报
回复
可能是你用模型编制,而不是用完整的段定义编制,否则该处的偏移应该为0。
而后者是被推荐使用的。
kanlejiuhao
2005-06-05
打赏
举报
回复
phpsessid(风随影动):使用small模型方式编制会占用前000d个地址——不明白
当我把 LEA DX,BUF 改为 MOV DX,OFFSET BUF 时,
debug程序中的相应语句变成了 MOV DX,000C
而当我同时写上 LEA DX,BUF 和 MOV DX,OFFSET BUF 时,
debug中的语句变成了 LEA DX,[0000] 和 MOV DX,0000
真是很奇怪!
[合集]
请教
两个网原
问题
.docx
[合集]
请教
两个网原
问题
.docx
实现嘀嘀打车选择上车地址的功能
源码MapKitTest,使用mapkit简单实现滴滴打车选择上车地点的功能 。里面有火星坐标转换地球坐标的代码有需要的拿走!想法是利用mapkit实现滴滴打车选择上车地址的功能。 思路是选择地图的中心点坐标,然后再进行反地理编码,加上一张图片,在地图以后结束后给图片一个简单的动画(就是换下frame)。 但是简单的取完中心坐标再去反地理编码,得出结果有很大偏移。
请教
了下微博上的里脊串。说应该是地球坐标和火星坐标的转换
问题
。 苦苦的查询了一天,在要绝望的时候查到了。添加完结果还算可以。 发这个上来除了分享给大家 火星转地球的代码,还有就是这个小功能我弄得太粗糙了,现在功能中有许多细节
问题
要处理。 本人能力不够啊,希望有人给优化下。 谢谢
实用汇编程序,对初学者很有帮助!
西工大计算机学院的经典汇编程序,很实用!望大家指教!
微机原理汇编语言编程软件masm
学习微机原理课程,如何实战汇编语言编程?请使用masm50,亲测win10/win7均可使用。不会用请留言,我教你。
精选技术员工作计划范文 .doc
精选技术员工作计划范文 .doc
汇编语言
21,497
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章