(1)将下面的程序编译连接,用DEBUG加载、跟踪,然后回答问题:
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段中的数据为多少?
0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H
②cpu执行程序,程序返回前,CS=(0B53H),SS=(0B52H),DS=(0B51H)
③设程序加载后,CODE段的段地址为X,则DATA段的段地址为(X-2H),STACK段的段地址为(X-1H)。
(2)将下面的程序编译连接,用DEBUG加载、跟踪,然后回答问题:
ASSUME CS:CODE,DS:DATA,SS:STACK
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
①cpu执行程序,程序返回前,DATA段中的数据为多少?
0123H,0456H
②cpu执行程序,程序返回前,CS=(0B53H),SS=(0B52H),DS=(0B51H).
③设程序加载后,CODE段的段地址为X,则DATA段的段地址为(X-2H),STACK段的段地址为(X-1H)。
④对于如下定义的段:
NAME SEGMENT
.........
NAME ENDS
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为(此处答案上是 (N/16+1)*16,我实在不知道为什么)。
(3)将下面的程序编译连接,用DEBUG加载、跟踪,然后回答问题:
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 AX,4C00H
INT 21H
CODE ENDS
DATA SEGMENT
DW 0123H,0456H
DATA ENDS
STACK SEGMENT
DW 0,0
STACK ENDS
END START
①cpu执行程序,程序返回前,DATA段中的数据为多少?
0123H,0456H
②cpu执行程序,程序返回前,CX=(0B51H),SS=(0B55H),DS=(0B54H).
③设程序加载后,CODE段的段地址为X,则DATA段的段地址为(X+3H),STACK段的段地址为(X+4H)。
(4)如果将1、2、3题中的最后一条伪指令“END START”改为“END”(也就是说,不指明程序的入口),则哪个程序仍然可以正常执行?请说明
原因。
第三个程序仍能够正常执行。因为1、2中,数据和栈在前,cpu先执行这些不正确的“指令”导致错误。3的代码在数据和栈前面,故可以正常
执行。
(5)程序如下,编写CODE段中的代码,将A段和B段中的数据依次相加,将结果存到C段中。
ASSUME CS:CODE
A SEGMENT
DB 1,2,3,4,5,6,7,8
A ENDS
B SEGMENT
DB 1,2,3,4,5,6,7,8
B ENDS
C SEGMENT
DB 0,0,0,0,0,0,0,0
C ENDS
CODE SEGMENT
START:
MOV AX,A
MOV DS,AX
MOV AX,C
MOV ES,AX
MOV BX,0
MOV CX,8
S:MOV AL,[BX]
ADD ES:[BX],AL ;一颗种子一个坑,撒好第一遍了
ADD BX,1
LOOP S
MOV AX,B
MOV DS,AX
SUB BX,BX
MOV CX,8
S0:MOV AL,[BX]
ADD ES:[BX],AL ;再撒一遍,一个个对应相加
ADD AL,1
LOOP S0
MOV AH,4CH
INT 21H
CODE ENDS
END START
(6)程序如下,编写CODE段中的代码,用PUSH指令将A段中WORD数据,逆序存储到B段中。
ASSUME CS:CODE
A SEGMENT
DW 1,2,3,4,5,6,7,8
A ENDS
B SEGMENT
DW 0,0,0,0,0,0,0,0
B ENDS
CODE SEGMENT
START:
MOV AX,B
MOV SS,AX
MOV SP,10H
MOV AX,A
MOV DS,AX
MOV BX,0
MOV CX,8
S:PUSH [BX]
ADD BX,2
LOOP S
MOV AH,4CH
INT 21H
CODE ENDS
END START
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:39
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:39
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 +瀨52sora饑渴淫蕩人妻求幹 +瀨52sora饑渴淫蕩人妻 03/12 00:38
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:38
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:38
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:37
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:37
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:37
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:37
- [lai-52sora] +瀨52sora饑渴淫蕩人妻求幹 03/12 00:37
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:31
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:30
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:30
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:30
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:30
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:29
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:29
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:29
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:26
- [游客] 千喜全台外送茶賴ns771《telegram:xd713》 #清純可愛淫蕩少女#升級老司機紅牌妹 05/19 00:25
[ 游客 发表于 2010-10-02 22:26 ]
④对于如下定义的段:
NAME SEGMENT
.........
NAME ENDS
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为(此处答案上是 (N/16+1)*16,我实在不知道为什么)。
-------
一个段占用的空间是16的整数倍,最小空间为16
所以一个数据大小为N(N本身不一定是16的倍数)的段,实际大小应为(N/16+1)*16