汇编基础问题

发布网友 发布时间:2022-04-19 23:37

我来回答

3个回答

热心网友 时间:2023-09-04 17:48

1.cpu执行程序,程序返回前b(也就是数据段)的数据没有改变,因为入栈和出栈的顺序正好对应。

2.改程序加载后,a段的段地址是x,则b段的段地址是x+3,c段的段地址是x+4。
程序被加载之后,存于自由内存的最低地址,存放顺序完全按着程序设计的顺序,段地址的分配是按着各个段所占内存的节(16字节/节,英文名称:paragraph)数来顺序分配的,不足1节的,按1节分配。如本程序,代码段开头,假定段地址为x,代码段代码共21字节,所以代码段占3节内存空间;紧接着是数据段,由于代码段占3节,所以,数据段段址为x+3;数据段共4个字节,占1节的内存空间,那么,相邻的下一个段,也就是堆栈段的段地址为x+3+1,即x+4。

楼主初学汇编,出现一些纰漏,也很正常。这个程序在masm编译器下不会通过编译。其中,堆栈段的段标号会出现语法错误。再者,就整体程序来看,三个段标号都是一个字符,过于简单。建议,命名标号、变量名等,最好采用字母、数字及其它一些符合命名要求的符号的组合方式。

热心网友 时间:2023-09-04 17:48

1、你说的其实是是指mov ax,b后ax的数据,因为ax是16位值,所以就会把dw 0123h,0456h的最前面的01h值给取过来。

2、段地址是程序运行时系统根据可用内存自动分配的,不是固定的。

程序中这么用只是为了确定不要把不该引用的数据取过来。

但中的偏移地址才是固定的。从0开始

非要看可用debug加载该程序,就可以看到分配的段地址。

热心网友 时间:2023-09-04 17:49

MOV
CX,DS:[2000H]
;取出偏移地址到CX
MOV
BX,DS:[2002H]
;取出段地址到BX
MOV
DS,BX
MOV
AX,DS:[CX]

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com