有杨儒贵编的《电磁场与电磁波》(第一版)的课后习题答案

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