5、1
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,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:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
①、CPU执行程序,程序返回前,data段中的数据为多少?
答:不变
②、CPU执行程序,程序返回前,cs=[0b84],ss=[0b83],ds=[0b82]
③、设程序加载后,code段的段地址为X,则data段的段地址为[X-2],
stat段的段地址为[X-1]。
- [qiangzi] ;(因为bx+1,要等于0,所以第2个字节要为0) 这话好像有点错误吧,是不是第2,3个字节为0啊 01/21 19:23
- [ryan1779] 是啊,后来发现写 mov [bx+2],cx 就好了 08/11 22:36
- [tinyparticle] 第(2)中有错误,mov [bx+2],0b83h此条指令中的0b83h是博主debug中的默认段地 07/31 18:22
- [ryan1779] 感谢ls几位的热心解答,总于搞出来了。 mov ax,0a8h[bx],bx出错了,又多用了个寄存 07/28 10:58
- [younggay] 上面的地址计算看明白了,是手动计算的,没什么问题。呵呵 不过,我跟踪了一下,你的程序在寻址想内 07/27 10:11
- [younggay] mov ax,0a8h[bx] =================== 怎么是0a8H的起始 07/27 09:53
- [younggay] 除法溢出,说明做运算的两个数据可能有点问题。你单步跟踪,看看到底是哪里出现溢出,看一下此时的两个数据 07/27 09:45
- [tinyparticle] mov ax,0a8h[bx] mov es:0ah[bx],ax 这里好像 07/26 20:04
- [游客] 程序第一行的assume写错了,编译出错,修改后程序运行正确。 07/20 09:37
- [ryan1779] 现在的理解是,16字节内的(包括16字节,算一个段,10H),超出16字节,但不超出32字节的,也算 07/19 15:52
[ 游客 发表于 2009-07-15 14:07 ]
嗯。