一个汇编小问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 13:57:20
ASSUME CS:CODE,DS:DATA,SS:STACK
CODE SEGMENT
START:
MOV AX,STACK
MOV SS,AX
MOV SP,16
MOV AX,DATA
MOV DS,AX
PUSH DS:[0]
PUSH DS:[2]
POP DS:[2]
POP DS:[0]
MOV AH,4CH
INT 21H
CODE ENDS

DATA SEGMENT
DW 0123H,0456H
DATA ENDS

STACK SEGMENT
DW 0,0
STACK ENDS
END START
这是程序 假设其中程序加载后 CODE段地址为X,那么请问DATA和STACK的段地址是多少

答案是 X+3 X+4

哪位高手能给我讲解一下为什么会是这个答案 CS DS 和 SS这三个段有什么关联吗

DOS中内存以节为分配单位,每个节为16字节(因为DOS采用分段管理,物理内存地址为段地址左移4位+偏移量,所以每个段最少需要16字节)。
你的代码段长度为33字节共需占用3个节,数据段四字节占1个节,所以也就有了DS=CS+3,SS=CS+4之说。
然而Windows(NT内核)就不是采用节为内存分配单位,它采用4K页面为分配单位,所以也就没有上面的一说。很明显你的那个出题老师是一个食古不化的家伙。

我好久也没搞86了
由于水平有限我就给你说一下
CS DS 和 SS这三个段的关联吧·

由于PC机的冯诺伊曼计算机体系结构
就是 代码和 数据 同在一个内存中!

但是怎么区分呢?

于是就用了这几个段 就是
CS 为代码段
ds 数据段
ss 堆栈段!