943566987 发表于 2014-5-15 11:33:49

汇编 第六章 实验五(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:18:07

本帖最后由 沉ジ寞 于 2014-5-15 13:19 编辑

你的答案是正确的,每台机子上运行出来的结果都不一样 ,但是你没有看清题意!
第二个问题是:CPU执行程序,程序返回前cs:ss:    ds:的值,也就是程序运行到int 21h 这句之前,寄存器的结果
而x-2x-1这是根据的出的结果计算出来的,意义不大

xiaosawanjava 发表于 2014-5-15 14:17:17

本帖最后由 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 ,你可以去试试。

青玄 发表于 2014-5-15 17:24:37

恩恩!支持楼上的回答!{:2_27:}

青玄 发表于 2014-5-15 17:24:54

恩恩!支持楼上的回答!{:2_27:}

黄种人 发表于 2014-6-27 14:21:03

呵呵,三楼正解……

ω壞孩子ζ 发表于 2014-6-27 20:25:50

3楼说的对{:1_1:}

七月你好 发表于 2014-6-30 13:48:37

我也刚做到这里,其实就是和你定义的3个顺序有关,你可以吧实验的第(3)题也做一下,把他们的顺序是调过来的,结果又不一样了,因为cpu在运行的时候,是从上到下运行。我个人是这样认为的,新手作答,如果有错,欢迎指出、。

abclin1995 发表于 2014-7-16 21:17:48

xiaosawanjava 发表于 2014-5-15 14:17
这个问题我也纠结过,这个data为 x-2 stack x-1 其实也是不确定的,你这程序如此是因为,你的data定义在前 ...


这是第三题的结果,按你所说,不应该是cs=ds-1=ss-2么?

abclin1995 发表于 2014-7-16 21:19:28

七月你好 发表于 2014-6-30 13:48
我也刚做到这里,其实就是和你定义的3个顺序有关,你可以吧实验的第(3)题也做一下,把他们的顺序是调过来 ...

看看我的结果为什么是这样?
页: [1]
查看完整版本: 汇编 第六章 实验五(1) 疑问