汇编 第六章 实验五(1) 疑问
本帖最后由 943566987 于 2014-5-15 11:38 编辑assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:
push ds:
popds:
popds:
mov ax,4c00h
int 21
code ends
end start
我在做实验五答案跟我理解的有一定出入 所以发出来想问问我这样做是否正确
(1) CPU执行程序,程序返回前 cs= ss= ds=
程序载人后CS值是1446我用U查看了一下
执行到PUSH 【2】看了一下SS 是1445
程序执行到POP 【0】要执行到下一条指令 DS是1444
因此答案是 CS=1446 SS=1445 DS=1444不知道我这样做答案是否正确
(2)设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1为什么DATA段地址是X-2,STACK段地址是X-1 这道题我不明白去解释
本帖最后由 沉ジ寞 于 2014-5-15 13:19 编辑
你的答案是正确的,每台机子上运行出来的结果都不一样 ,但是你没有看清题意!
第二个问题是:CPU执行程序,程序返回前cs:ss: ds:的值,也就是程序运行到int 21h 这句之前,寄存器的结果
而x-2x-1这是根据的出的结果计算出来的,意义不大 本帖最后由 xiaosawanjava 于 2014-5-15 14:28 编辑
这个问题我也纠结过,这个data为 x-2 stack x-1 其实也是不确定的,你这程序如此是因为,你的data定义在前面,stack定义在data后面,code 定义在stack后面
你也可以这样认为,假设data = 1 ,stack = data+1 ,code = stack+1 ,因此data = code -2,stack = code -1。
如果你把data段放在后面,那他就不是-1了,也许就是+1或者+2 ,你可以去试试。 恩恩!支持楼上的回答!{:2_27:} 恩恩!支持楼上的回答!{:2_27:} 呵呵,三楼正解…… 3楼说的对{:1_1:} 我也刚做到这里,其实就是和你定义的3个顺序有关,你可以吧实验的第(3)题也做一下,把他们的顺序是调过来的,结果又不一样了,因为cpu在运行的时候,是从上到下运行。我个人是这样认为的,新手作答,如果有错,欢迎指出、。 xiaosawanjava 发表于 2014-5-15 14:17
这个问题我也纠结过,这个data为 x-2 stack x-1 其实也是不确定的,你这程序如此是因为,你的data定义在前 ...
这是第三题的结果,按你所说,不应该是cs=ds-1=ss-2么?
七月你好 发表于 2014-6-30 13:48
我也刚做到这里,其实就是和你定义的3个顺序有关,你可以吧实验的第(3)题也做一下,把他们的顺序是调过来 ...
看看我的结果为什么是这样?
页:
[1]