有杨儒贵编的《电磁场与电磁波》(第一版)的课后习题答案
3)MOV CH,TABL3+2 CH=(0CH)
4)MOV DL,ARRAY DL=(41H)
5)MOV DH,COUNT DH=(4)
第四章
4.1写出完成下述功能的程序段:
1)将32H存入CH中.
MOV CH,32H
2)将CH中的内容与2AH相加.
ADD CH,2AH
3)将CH中的内容乘2
ADD CH,CH ;(练习册上的答案为:SHL CH,1)
4)将CH中的内容存入以BX作为相对基址寻址的数组变量NUM的第10个字节单元中(数据段)
MOV BX,9
MOV NUM[BX],CH
4.2写出完成下述功能的程序段:
1)在数据段中,字变量DARA1有两个数据:1C35H和0214H,字变量DARA2有两个数据:0A678和81A4H,字变量DARA3为二个空单元.
作者: 218.27.73.* 2005-9-3 09:21 回复此发言
--------------------------------------------------------------------------------
4 汇编语言程序设计课后习题答案
DATA SEGMENT
DARA1 DW 1C35H,0214H
DARA2 DW 0A678,81A4H
DARA3 DW 2 DUP (?)
DATA ENDS
2)将DATA1的第一个字数据传送给AX.
MOV AX,DATA1
3)将AX的内容与FARA2的第一个字数据相减
SUB AX,FARA2
4)将AX中的结果存入DATA3的第一个空单元.
MOV DATA3,AX
5)将DATA1的第二个字数据传送给AX.
MOV AX,DATA1+2
6)将AX的内容与SARA2的第二个数据及第一次相减速的借位相减
SBB AX,SARA2+2
7)将AX的结果存入DATA3的第二个单元中
4.3在A1和A2的字单元中各有一个带符号数字数据,试求出A1和A2组成的双字长数的绝对值,存入B1和B2的字单元中,画出程序流程图和编写职程
序段,包括伪指令和指令序列.
DATA SEGMENT
A1 DW n1
A2 DW n2
B1 DW ?
B2 DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MOV AX,DATA
MOV DS,AX
CMP WORD PTR A2,7FFFH
JNL CODE1
NEG WORD PTR A2
NEG WORD PTR A1
CODE1: MOV AX,A1
MOV DX,A2
MOV B1,AX
MOV B2,DX
MOV AH,00H
INT 21H
CODE ENDS
END
4.4将存放在字节变量BCD1中的两个十进制数的ASCII码合并为一字节压缩的BCD码,存入BCD2中,试编写程序段
DATA SEGMENT
BCD1 DB 37H,38H
BCD2 DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV AL,BCD1+1
AND AL,0FH
MOV BL,BCD1
MOV CL,4
SHL BL,CL
OR AL,BL
MOV BCD2,AL
CODE ENDS
END START
4.5分别编写出下列各算式的程序段,其中X、Y、Z、R和W均为存放16位无符号数的单元符号地址:
DATA SEGMENT
X DW 3031H
Y DW 3032H
Z DW 3033H
R DW 3034H
W DW 3035H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
;1)Z<---W+(z-x)
MOV AX,Z
SUB AX,X
ADD AX,W
MOV Z,AX
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;2)Z<---(W*X)/(Y+6),R<---余数
MOV AX,W
MUL X
MOV BX,Y
ADD BX,6
DIV BX
MOV Z,AX
MOV R,DX
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;3)Z<---W-(X+6)-(R-9)
MOV AX,R
SUB AX,9
MOV BX,X
ADD BX,6
MOV CX,W
SUB CX,BX
SUB CX,AX
MOV Z,CX
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;4)Z<---((W-X)/5×Y)×2,余数丢弃
MOV AX,W
SUB AX,X
DIV 5
MOV AH,00H
MUL Y
MUL 2
MOV Z,AX
MOV R,DX ;计算结果如果是双字节,将高16位存入Z字单元后面的一个字位中。
DTATA ENDS
END START
5.1分支程序可分为哪些功能部分?用流程图的形式来表示各种分支程序的功能组成部分?双分支条件是怎么样才能产生?多分支条件是怎么样形成的?各种分支程序判断条件的方法有什么不同?实现分支的方法有什么不同?
分支程序可分为:产生条件、测试、定向、标号。流程图见教材P119图5-4。用能够影响CF、ZF、OF的指令来产生条件,如CMP,SUM,AND,TEST,位移指令。(其余答案略,书上都有)
5.2试分析下列程序段,说明完成了什么操作?程序执行前后,HEXNUM字节单元的内容是什么?
ASCNUM DB 41H
HEXNUM DB ?
MOV AH,ASCNUM
CMP AH,39H
JBE NEXT
SUB AH,7
NEXT: SUB AH,30H
MOV HEXNUM,AX
HLT
完成了当ASCNUM所表示的十六进制数的ASCII码转换成十六进制数,并存入ASCNUM字节单元的低四位,执行前是空单元,执行后是0A。
5.3试编写完成题5.3图的流程图所规定的操作
P1: MOV AX,-1
JMP P4
P2: MOV AX,0
JMP P4
P3: MOV AX,1
JMP P4
CMP AX,-1
JLE P1
JL P2
JMP P3
p4: MOV AL,00H
INT 21
5.4测试ALPHA字节变量单元中的ASCII码字符,进行如下操作:
1)若为数字字符,送入NUM字节单元中,置标记FLAG为0
2)若为大写字母字符,送入BIGCHR字节单元中,置标记FLAG为0
3)若为小写字母字符,送入SMLCHR字节单元中,置标记FLAG为0
作者: 218.27.73.* 2005-9-3 09:21 回复此发言
--------------------------------------------------------------------------------
5 汇编语言程序设计课后习题答案
4)否则,置标记FLAG为1
DATA SEGMENT
ALPHA DB "A"
NUM DB ?
BIGCHR DB ?
SMLCHR DB ?
FLAG DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV AX,ALPHA
CMP AX,30H
JBE N4
CMP AX,39H
JA N1
MOV NUM,AX
JMP N5
N1: CMP AX,41H
JB N4
CMP AX,5A
JA N2
MOV BIGCHR,AX
JMP N5
N2: CMP AX,61H
JB N4
CMP AX,7a
JA N4
MOV SMLCHR,AX
JMP N5
N4: MOV FLAG,1
JMP N3
N5: MOV FLAG,0
N3: MOV AX,00H
INT 21
CODE ENDS
END START
5.5设在变量单元A、B和C中存放有三个数,若三个数都不为0,则求出三个救之和存入D;若有一个为0,则将其它两个单元也清零,请编写此程
序段。
DATA SEGMENT
A DB 10
B DB 20
C DB 30
D DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CMP A,0
JZ P1
CMP B,0
JZ P1
CMP C,O
JZ P1
MOV AL,0
ADD AL,A
ADD AL,B
ADD AL,C
MOV D,AL
JMP P2
P1: MOV A,0
MOV B,0
MOV C,0
P2: MOV AH,0
INT 21H
CODE ENDS
END START
5.6假设X和X+2单元与Y和Y+2单元中存放的是两个双字有符号数据(X、Y为低位字)。说明下列程序段所完成的是什么操作?若JBE L2指令
改为JB L2指令,在操作结果上有什么区别?AX=1和 AX=2分别说明了什么?
MOV DX,X+2
MOV AX,X
ADD AX,X
ADC DX,X+2
CMP DX,Y+2
JL L2
JG L1
CMP AX,Y
JBE L2
L1: MOV AX,1
JMP EXIT
L3: MOV AX,2
EXIT: HLT
将X的双字单元中的数乘2后与Y的双字单元中的数进行比较。如果X小于等于Y,将2写入AX中;如果X大于Y,将1写入AX。
如果装JBE L2指令改为JB L2,侧是X等于Y时,将1写入AX。其余同上。
5.7试编写一段程序,要求比较数组ARRAY中的三个16位有符号数。根据比较结果,置FLAG标志:
1)如果三个数都不相等,则置FLAG为零。
2)如果三个数有两个相等,则FLAG为1。
3)如果三个数全相等,则FLAG为2。
DATA SEGMENT
ARRAY DW 1000H,2000H,3000H
FLAG DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,ARRAY
MOV BX,ARRAY+2
MOV CX,ARRAY+4
MOV DL,0
CMP AX,BX
JNZ N1
INC DL
N1: CMP BX,CX
JNZ N2
INC DL
CMP DL,2
JZ N5
N2: CMP AX,CX
JNZ N3
INC DL
JMP N5
N3: CMP DL,1
JNZ N4
JMP N5
N4: MOV DL,0
JMP N6
N5: MOV FLAG,DL
N6: MOV AH,00H
INT 21H
CODE ENDS
END START
6.1 循环参数置初值部分,循环工作部分和循环控制部分。(这种题我不太会做,大家上书上找吧。)
6.2
1)将从2开始的连续10个偶数相加,将和存入SUM。SUM=110
2)将DAT1的后五个单元的数5,6,7,8,9依次送入DAT2的5个单元中去。DAT2的内容是5,6,7,8,9
6.3
1)
LEA AX,BUF1
LEA BX,BUF2
MOV CX,N
LOP1: MOV AL,[AX]
MOV [BX],AL
INC AX
INC BX
LOOP LOP1
2)
LEA SI,BUF1
LEA DI,BUF2
MOV CX,N
CLD
REP MOVSB
3)
LEA SI,BUF1
LEA DIBUF2
MOV CX,N
CLD
LP: LODSB
STOSB
LOOP LP
6。4
LEA BX,NUMBER
LEA SI,PLUS
MOV CX,256
LP: MOV AL,[BX]
INC BX
AND AL,AL
JNS L1
LOOP LP
JMP L2
L1: MOV [SI],AL
INC SI
LOOP LP
L2: HLT
6.5
DATA SEGMENT
GARDE DB a1,a2,a3,...a100
A90 DB 0
A80 DB 0
A70 DB 0
A60 DB 0
A0 DB 0
DATA EDNS
CODE SEGMENT
作者: 218.27.73.* 2005-9-3 09:21 回复此发言
--------------------------------------------------------------------------------
6 汇编语言程序设计课后习题答案
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,AX
MOV CX,100
LOP1: CMP [BX],60
JB P1
CMP [BX],70
JB P2
CMP [BX],80
JB P3
CMP [BX],90
JB P4
JMP P5
B1: BX+1
LOOP LOP1
P1: INC A0
JMP B1
P2: INC A60
JMP B1
P3: INC A70
JMP B1
P4: INC A80
JMP B1
P5: INC A90
JMP B1
CODE ENNS
END START
6.6
1) MOV FLAG,FFH
LEA AX,DATA1
LEA BX,DATA2
MOV CX,N
P0: CMP [AX],[BX]
JNZ P1
INC AX
INC BX
LOOP P0
JMP P2
P1: MOV FLAG,0
MOV DATA1,AX
MOV DATA2,BX
P2: HLT
2) ASSUME CS:CODE,DS:DATA,ES:DATA ;设DATA为数据段地址
MOV AX,DATA ;
MOV DS,AX
MOV ES,AX
LEA SI,DATA1
LEA DI,DATA2
MOV CX,N
CLD
REPE CMPSB
JNZ P1
MOV FLAG,0FFH
JMP P2
P1: MOV FLAG,0
MOV DATA1,[SI] ;参考书有在前面有两句DEC SI,DEC DI不知道是什么意思
MOV DATA2,[DI]
p2: HLT
6.7 LEA AX,BUFFER1
ADD AX,N
DEC AX
LEA BX,BUFFER2
MOV CX,N
LOP1: MOV DX,[AX]
MOV [BX],DX
DEC AX
INC BX
LOOP LOP17.1
主程序与子程序之间传递数据必须经过中间媒体,如CPU中的寄存器,肉存中的堆栈或工作单元来进行。分别对应一种传递方法。
寄存器存储数据小,但速度快。
堆栈后进先出,选进后出,有数量限制。多用于现场保护。存储单元有最大限度的自由度。
7.2时间延迟程序,为了等待一段时间。
7.3
把以DEST首地址的连续100个字节单元中的数据移到以SOURCE为首地址的连续100个字节单元中。(CALL会将CS,IP入栈,版主,CS也会入栈吗?这是不是因为是段外转移的原因呀)
后面的两道大题考试时出的可能性很小,由于时间原因,我暂时就不做了
第二章课后习题及答案 (2003-7-2 16:38:00)
--------------------------------------------------------------------------------
2.1 (1) MOV CX,[BX][SI]
(2) ADD AX,value[BX]
(3)? CMP 0B6H,NUM
(4) TEST [COUNT+BP+DI],80H
(5) ROL AH,4 或 ROR AH,4
(6) XOR [SI],[SI]
2.2 (1)----C
(2)----A
(3)----B
(4)----E
(5)----D
2.3 (1) AX=1200H
(2) AX=647AH
(3) (10050H)=7DH,(10051H)=0B7H
ZF=0,SF=1,CF=0,OF=0
(4) (12AD0H)=0F7H,CF=0,OF=0
(5) (12BD0H)=31H,CH=31H
2.4 (1)MOV AX,CL ;字与字节混用。
(2)MOV CS,AX ;CS控制程序区,不可放数据。
(3)INC BETA[BP] ;对存储器操作数,须指明是字或字节。
(4)MOV ES,1850H;立即数不能送段寄存器。
(5)ADD BX,DS;对ADD指令,段寄存器不可作SRC或DST.
(6)AND AX,[CX];?
后面的题目,我不知道出题者是什么意思,看不懂。麻烦楼主公布一下答案。谢谢!
2.7可以用MOV CX,BLOCK+10
2.10这段程序执行一下,肯定跑飞。
作者: 218.27.73.* 2005-9-3 09:21 回复此发言
--------------------------------------------------------------------------------
7 回复:汇编语言程序设计课后习题答案
XIEXIE
I LOVE YOU