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
(1)CPU执行程序,程序返回前,data段中的数据为多少?
//0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
(2)CPU执行程序,程序返回前,cs=0B5C、ss=0B5B、ds=0B5A.
(3)设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1.
assume cs:code,ss:stack,ds:data
data segment
dw 0123h,0456h
data ends
stack segment
dw 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
(1)CPU执行程序,程序返回前,data段中的数据为多少?
//0123h,0456h
(2)CPU执行程序,程序返回前,cs=0B5C、ss=0B5A、ds=0B4A.
(3)设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1.
(4)如果段中的数据占N个字节,
程序加载后实际占的空间有以下情况:
(1)当N!= 16的整数倍时,实占空间为(N/16 + 1)*16 字节;
(2)当N = 16时或为16的整数倍时,实点空间即为N字节。
通用公式:[(N+15)/16]*16,同样(N+15)/16只取整。
3.
(1)CPU执行程序,程序返回前,data段中的数据为多少?
//0123h,0456h
(2)CPU执行程序,程序返回前,cs=0B5A、ss=0B5E、ds=0B4D.
(3)设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4.
(4)3仍可以执行,因为程序加载后,CS:00处正好是指令起始的地方。因为如果不为程序指定入口地址,则加载后,程序指令内存空间默认PSP后为程序入口地址,也就是CS:00处。
- [dragon-zn] 1、 汇编语言程序载入内存后处于64K空间以外的数据和指令将无法使用和执行。(可用JMP指令跳转到6 10/19 15:41
- [游客] 很好,我做这个用了四个循环,现在想起来,冤 08/20 14:40
- [crazyman] 为了发展,还是从汇编这样的底层入手吧。 04/16 09:43
- [crazyman] 没什么好说的。 03/25 11:18
- [wsrf] 支持一下,呵呵 03/18 10:49
- [mengxinjinglong] 呵呵~这个我放心了,C语言我已经自学过了,到时候回家都会一起学习来巩固基础的额!汇编作业会在回家的时 12/24 12:04
- [younggay] 啊?!放假回来再交啊?!!! 到时候大家都开始学C了。 12/24 11:14
- [mouse] jmp指令 相对位移:-) 12/04 10:20
- [pascale] 我感觉你对第一题的第二问回答的不对。 我感觉是因为一个数据段的段名只是这个段的段地址而不是地址 12/04 00:20
- [younggay] 程序指令内存空间默认PSP后为程序入口地址, ------------ 不是psp开始为入口,加 11/21 13:27