有朋友会这道编程题吗,用汇编语言啊。。跪求答案啊。。。设在数据段中以BLOCK为首地址的存储区域中存...
data segment
blockdb 16 dup(?)
averagedb 0
data ends
code segment
start:mov ax,data
mov ds,ax
xor ax,ax
lea si,block
mov cx,16
_Add: mov bl,[si]
add al,bl
adc ah,0
inc si
loop_Add
div ax,16
mov average,al
mov ax,4c00h
int 21h
code ends
end start
-------------------------------------
DATA1 SEGMENT
NUM DB 100, 79, 20, 78, 89, 95, 76, 40, 88 最多99个成绩
DB 80, 98, 40, 0, 100, 83, 92, 49
NN EQU $ - NUM
MSG1 DB ' 0 ~ 59 : $'
MSG2 DB '60 ~ 89 : $'
MSG3 DB '90 ~100 : $'
CRLF DB 13, 10, '$'
N1 DB 0
N2 DB 0
N3 DB 0
DATA1 ENDS
-------------------------------------
CODE SEGMENT PARA PUBLIC
ASSUME CS:CODE, DS:DATA1
START:
MOV AX, DATA1
MOV DS, AX
LEA SI, NUM
MOV CX, NN
LP:
MOV AL, [SI]
CMP AL, 60
JBN1_JY
CMP AL, 90
JBN2_JY
INC N3
JMP NEXT
N1_JY:
INC N1
JMP NEXT
N2_JY:
INC N2
NEXT:
INC SI
LOOP LP
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV AL, N1
CALL HEX_ASC
LEA DX, MSG2
MOV AH, 9
INT 21H
MOV AL, N2
CALL HEX_ASC
LEA DX, MSG3
MOV AH, 9
INT 21H
MOV AL, N3
CALL HEX_ASC
EXIT:
MOV AH, 4CH
INT 21H
====================================
HEX_ASC PROC NEAR
MOV AH, 0
MOV BL, 100
DIV BL
MOV DL, AL
ADD DL, '0'
CALL OUT_DL
MOV AL, AH
MOV AH, 0
MOV BL, 10
DIV BL
MOV DL, AL
ADD DL, '0'
CALL OUT_DL
MOV DL, AH
ADD DL, '0'
CALL OUT_DL
LEA DX, CRLF
MOV AH, 9
INT 21H
RET
HEX_ASC ENDP
====================================
OUT_DL PROC
PUSH AX
MOV AH, 2
INT 21H
POP AX
RET
OUT_DL ENDP
====================================
CODE ENDS
-------------------------------------
END START
6.PentiumIV /1.7G/80G/16XDVD/256M/19’’液晶/56KMODEM
WINDOS2000
第二章
1.(101010.01)2=(42.25)10 =(2A.4)BCD
2.(37.2)8=(31.25)10=(1F.4)(AC.E)
3..(AC.E)16=(172。875)10
4.(75。34)10=(1001011.0)2=(113.125)8=(8E.06)16
5.两种做法:1.先将十进制数转换成二进制数再计算
2.先计算,结果再转换成二进制数。结果为0.0001101
6.(1)原码为00000000补码为00000000
(2)原码为10000000补码为00000000
(3)原码为0.1010000补码为0.1010000
(4)原码为1.1010000补码为1.0110000
(5)原码为00001010补码为00001010
(6)原码为10001010补码为11110110
7.X原=0.1010 X=+0.1010
8.X原=1.0110 X=-0.0110
9.(1)0.000…01
(2)0.11…11
(3)1.00…01
(
4)1.11…11
10.(1)0.00….01
(2)0.11…11
(3)1.11…11
(4)1.00…01
11.参照教材37页的表格公式,注意阶码部分连同阶符的位数以及尾数连同符号的位数
12.参照教材37—38页,
13.使用隐地址
14.采用寄存器寻址
15.(1)1200H
(2)1002H
(3)1200H 1200H
(4)F03H
第三章
3.(1)正溢 01,100000
(2)无 00,111111
(3)无11,100000
(4)负溢 10,100000
4.[X]补—[Y]补=[X]补+[Y]补+1
无 00,000110
(1) 正溢01,100000
(2) 无 11,101111
(3) 无 00,110011
5. 11,00;11,110011
6.(1)0110101
(2)11000011
(3)01011010
7.(1)0011;1000
(2)0011;1001
(3)1010;0000
12.以下所有题的取指过程都是一样的
FT0 PC → MAR
FT1 M → MDR→IR ,PC+1→ PC
(2)FT0:PC→MAR
FT1:M → MDR →IR,PC+1 → PC
ST0:PC → MAR ,PC+1→ PC
ST1:M→ MDR → C
ET0:C → R1
(5)FT0:PC →MAR
FT1:M → MDR → IR,PC+1 → PC
ST0:PC → MAR
ST1:M →MDR → C,PC+1→ PC
DT0:R0→ MAR
ET0:C →MDR
ET1:MDR → M
其余小题参照97—101页的内容,寻址方式不同,各个执行周期也不相同。
13.(2)FT0:PC → MAR
FT1:M→ MDR → IR ,PC+1 → PC
ST0:PC → MAR
ST1:M→ MDR →C,PC+1 → PC
DT0:R1 → MAR
DT1:M→ MDR →D
DT2:R1+1 → Z
DT3:Z → R1
14.(3)FT0:PC →MAR
FT1:M → MDR → IR,PC+1 → PC
ET0:PC →MAR
ET1:M →MDR → D
ET2:D+PC → Z
ET3:Z →PC
第四章
3.该题进行计算时采用变形补码比较方便,可以顺便判断OF位。此题可以上机验证。
4.画图时存储器中地址从上到下是按由低向高排列
002B0H→53H
002B1H→2CH
002B2H→
002B3N→OEH
002B4H→1FH
7.(1)0007H
(2)3400H
8.0562H
9.物理地址1E2C:0062 SP的初始值为64H SP的初始值指向的物理地址是1E324H
10.(SP)=3CH
11.(SP)=5EH
13.(1)对(2)对(3)错 (4)对 (5)错 (6)对 (7)对 (8)错 (9)错
(10)错 (11)对 (12)对
分析错误的原因
14.CF=1 AF=1 ZF=0 SF=0 OF=0 (AL)=15H
15.(1)(CL)=(09226H)=F6H
(2)(1E4F6)=5678H
(3)(BX)=0056H、(AX)=1E40H
(4)(SI)=00F6H、(DS)=1E40H、(1E4F6)=0024H
(5)(0026H)=5678H、(CX)=00F6H、(09226H)=1234H、(AX)=5678H
6.MOV AX,[02C0]
MOV AX,0020H[SI]
MOV AX,[BP]
MOV AX,80H[DI][BX]
试试看,你还能写出几种。
17.(SI)=12484H、(AX)=6156H
18.(AX)=81C6H 、CF=1
19.(AX)=F8E0H、CF=1
20.(AX)=1236H、(BX)=0001H
21.(AX)=0001H
22.(BX)=0012H、ZF=0、CF=1
23.(AX)=FBABH
24.(AX)=0000H、CF=0
25.(AH)=0001H、(AL)=0101H 、CF=1
26.(SI)=0102H、(AL)=A5H
28.(1)program1:
LAFH
OR AH,80H
SAHF
Program2:
PUSHF
POP AX
AND AX,立即数
PUSH AX
POPF
(2)program1:
MOV CL,04H
ROL AL,CL
Program2:
MOV CL,04H
ROR AL,CL
(3)MOV SI,A
MOV BX,B
LEA AX[SI][BX]
(4)MOV CL,2
SHR AX,CL
MOV BX,DX
AND BX,0003H
MOV CL,OEH
SHL BX,CL
OR AX,BX
MOV CL,2
SHR DX,CL
(5)OR CX,0001
(6)XOR AX,OAH
(7)NOT AX
XOR BX,AX
第五章
1.(1)错(2)对(3)错(4)错(5)错(6)对(7)错(8)错
2.(1)(5)(6)(7)(8)(9)
3.(AL)=3, (Bx)=33H
4.(AX)=1234H, (BX)=34H
5.(SI)=7812H, (DS)=0CD56H
6.SI,S2的偏移量分别为30H,38H。CONT的值为8,S2+5字节单元的内容为43H
7.00H, FFFFH, FFH
8.0000H, 5550H
9.00AAH, FFFEH, FF54H用补码表示
10.前两问的答案
DX:008H,0007H,0006H, 0006H, 0005H, 0004H, 0000H共六个
AX:4567D, 456D, 45D,4D, 0000D, 注意进制
11.(AX)=56D4H, (BX)=ADA8H, CF=0
12.01H, D1H,C1H
13.‘A’‘B’‘C’‘D’‘E’‘F’‘G’‘H’‘I
14.0014H, 0007H
15.PUSH AX
POP DX
16.ORG 0020H
17.参照教材156页
18.第一个不同字符的位置,5。
19.地址由低到高依次为:00H,02H,04H,06H,08H。0AH,0CH,0EH ,10H…
20.(1)INC DX
(2)DEC DX
21.5, 24H
22.6, 1CH
23.0308H,0008H,000CH
24.(1)XOR AH,AL
(2)JE ZERO
25.ADD AH,1
ADC AX,1
31.(1)计算AL中的十进制数的二进制表示
(2)24H
32.(1)是0——9的数字或大写字母00——2F,
(2)输入为‘*’
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)
LEAAX,BUF1
LEABX,BUF2
MOVCX,N
LOP1: MOVAL,[AX]
MOV[BX],AL
INCAX
INCBX
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
A90DB 0
A80DB 0
A70DB 0
A60DB 0
A0 DB 0
DATA EDNS
CODE SEGMENT
作者: 218.27.73.* 2005-9-3 09:21 回复此发言
--------------------------------------------------------------------------------
6 汇编语言程序设计课后习题答案
ASSUMECS: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.7LEA 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