求一道汇编语言程序设计题的答案
-------------------------------------
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
.MODEL SMALL
.STARTUP
.CODE
MOV AH ,1
INT 21H
MOV BH,AL
MOV AH,1
INT 21H
MOV BL,AL
ADD BH,BL
DAA
MOV DL,BH
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
.EXIT
一、填空:
1、CPU的指令指针寄存器为:,它与 寄存器联用确定下一条指令的物理地址。
2、若要将所有数据及代码都放在一个段内,应建立 存储模型。
3、操作数:ES:TABLE[DI]、FEES[EBX*2]、MSAK[EAX][EBX]分别采用、
、寻址方式。
4、读取当前光标位置可使用BIOS INT 10H的号功能调用,作为出口参数,光标的行号及列号将从 寄存器中获得。
5、通常用CPU的寄存器间接寻址端口地址。
6、如果在宏定义体设置局部标号,应使用伪操作以避免在宏展开时出现标号的多重定义。
7、设(CS)=2A31H,(DS)=9300H,(SS)=25F0H,(BP)=0131H,(SI)=0110H,(DI)=0102H,则指令MOV AX,[BP+SI+8]的源操作数有效地址为________________,物理地址为_________________。
8、设(AX)=1000H,(BX)=2340H,则在执行了指令CMP AX,BX后,CF标志值为___________,ZF标志值为______________。
9、外设的发出中断请求若被CPU响应,有两个条件必不可少,即和 。
10、显示字符串可使用DOS 9号功能,它要求被显示的字符串最后一个字符必须是 。
11、中断发生时,保存现场将、、 寄存器的内容存入堆栈。
12、n位二进制补码数的表数范围为: 。
13、将两个不同模块中的同名段重叠成两个段中较大的一个段,在定义段时应采用 组合属性。
14、操作数:ES:STRING[SI]、COUNT[ESI*4]、MSAK[EBX][ECX]分别采用、、寻址方式。
15、设置光标位置可使用BIOS INT 10H的号功能调用,作为入口参数,光标的行号及列号应存入 寄存器。
16、通常用CPU的寄存器间接寻址端口地址。
17、若在模块1中引用模块2中定义的外部符号,则在模块1和模块2中的开头分别使用
、 伪指令。
18、设(CS)=25FFH,(DS)=2140H,(SS)=2510H,(BP)=02D0H,(SI)=0010H,(DI)=0206H,则指令MOV AX,[BP+SI+2]的源操作数有效地址为_________________,物理地址为______________。
19、有数据定义如下:
V1 DB 4 DUP(2),2
COUNT EQU 10
V2 DD COUNT DUP(8,5 DUP(?))
则:为变量V1分配____________个字节存贮空间;V2分配____________个字节存贮空间.
20、外设的发出中断请求若被CPU响应,有两个条件必不可少,即 和 。
21、子程序之间传递参数可使用 、 和 三种方式。
22、若中断类型为4AH,则中断向量的地址为。
23、CPU的指令指针寄存器为:,它与 寄存器联用确定下一条指令的物理地址。
24、当端口号≥256时,使用IN或OUT指令,必须先将端口号放到 寄存器。
25、操作数:ARY[EAX*2]、ES:[TABLE+SI]、SUM[EBX][EDX]分别采用、
、寻址方式。
26、变量有三属性,分别为: 、、 。
27、如果在宏定义体设置局部标号,应使用伪操作以避免在宏展开时出现标号的多重定义。
28、宏定义必须由伪指令 开始,伪指令 结束。
29、设(CS)=9896H,(DS)=9100H,(SS)=25F0H,(BX)=0111H,(SI)=0810H,(DI)=0102H,则指令MOV [BX+SI+8],CX的目的操作数有效地址为___________,物理地址为_____________。
30、读取当前光标位置可使用BIOS INT 10H的号功能调用,作为出口参数,光标的行号及列号将从 寄存器中获得。
31、中断发生时,保存现场将 、 、 寄存器的内容存入堆栈。
32、若:FEES DW 10 DUP(10,5 DUP(?)),则指令:MOV CX,LENGTH FEES执行后,(CX)=.
二、选择题
1、 下列寄存器中,( )可作为基址寄存器。
A、AX B、BX C、CX D、DX
2、 下列指令序列中,清除当前中断请求(EOI)命令为:()
A、MOV AL,20H B、MOV AL,20H C、MOV AL,21H D、MOV AL,21H
OUT 20H,AL IN AL,20H OUT AL,21HIN AL,21H
3、 段定义时,使用( )定位类型,则该段必须从小段的边界开始。
A、BYTE B、WORD C、DWORD D、PARA
4、 若:(BX)=4336H,(CX)=0136H指令:SUB BX,CX 执行后,SF、ZF、OF、CF标志分别为( )
A、0,0,0,0 B、0,1,0,0C、1,0,0,0 D、0,0,0,1
5、 若:FEES DW 10 DUP(100,?)
指令:MOV CX,LENGTH FEES执行后,CX的内容为:( )
A、1000B、1 C、10 D、2000
6、 在循环指令中作为计数器的是( )寄存器。
A、AX B、BX C、CX D、DX
7、 在执行除法指令时,若除数为零则产生一个类型号为( )的中断。
A、0 B、1C、3 D、4
8、 段定义时,使用( )定位类型,则该段必须从字的边界开始。
A、PARAB、WORD C、DWORD D、BYTE
9、 若:(BX)=4336H,(CX)=0136指令:SUB BX,CX 执行后,SF、ZF、OF、CF标志分别为:( )
A、0,0,0,1 B、0,1,0,0C、1,0,0,0 D、0,0,0,0
10、若:FEES DW 100 DUP(?),
则指令:MOV CX,LENGTH FEES执行后,CX的内容为:( )
A、100 B、1C、10 D、0
11、下列寄存器中,()不能作为变址寄存器。
A、EAX B、EBP C、ECX D、ESP
12、 下列指令序列中,哪条指令与SUB AX,AX效果相同:()
A、AND AX,AX B、OR AX,AX C、XOR AX,AXD、NOT AX
13、 将两个不同模块中的同名段重叠成两个段中较大的一个段,应采用()组合属性。
A、PUBLIC B、COMMON C、PRIVATE D、MEMORY
14、 若:(AX)=0F365H,(CX)=0E024H指令:ADD AX,CX 执行后,SF、ZF、CF、OF标志分别为:( ).
A、1,0,1,0 B、0,1,0,0C、0,0,0,0 D、0,0,0,1
15、 显示字符串可使用DOS 9号功能,它要求被显示的字符串最后一个字符必须是( ).
A、& B、$ C、% D、@
三、判断下列指令及伪指令是否正确(在括号中打“√”或“×”):
1、DIV 20H ( )
2、XCHG BX,ES( )
3、CMP [BX],TABLE[SI]( )
4、IN AL,DX ( )
5、MOV BYTE PTR[BX],25H ( )
6、MOV CS,0200H ( )
7、RET 8 ( )
8、LEA TABLE,BX( )
9、ACL1 MACRO A,B,C ( )
┆
ACL1 ENDM
10、NEWP PROC ( )
┆
NEWP ENDP
11、MUL 20H ( )
12、MOV BX,[SI][DI]( )
13、CMP [BX],TABLE[SI] ( )
14、OUT DX,AL ( )
15、MOV [DX],25H( )
16、POP CS( )
17、RET 8 ( )
18、LEA TABLE,BX ( )
19、MOVE EQU MOV ( )
20、FEED MACRO X,Y,Z ( )
┆
FEED ENDM
21、ADD ES:BX,20H ( )
22、XCHG DX,DS ( )
23、CMP [BX],TABLE[SI] ( )
24、OUT DX,AL ( )
25、RET 8 ( )
26、DATA1 DB DATA0 ( )
27、MOVE EQU MOV( )
四、完成下列指令序列:
1、将数据段中字串STRING1(长度为N),传送到附加段中以BUFF为首地址的缓冲区:
┆
MOV SI,
MOV DI,
MOV CX, N
CLD
REP
2、分别用一条语句实现下述指明的功能
(1)变量AYD存放的地址指针送ES和SI
(2)AX的内容加1,要求不影响CF
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX1、设置中断向量(中断例行程序为INTERHAND,中段类型号为N)
┆
MOV AX,SEG INTERHAND
MOV DS,AX
MOV DX,
MOV AL,N
INT 21H
┆
INTERHAND:
┆
IRET
3、清除全屏幕
┆
MOV AX,
MOV BH,7
MOV CX,
MOV DX,
INT 10H
┆
4、分别用一条语句实现下述指明的功能
(1)字变量LIST存放的地址指针送ES和DI.
(2)将AX的内容加1,要求不影响CF.
(3)将BX的高4位置1,其余位不变.
(4)将SI指向的字单元内容存入堆栈.
(5)比较两个带符号数,若前者≥后者,则转向NEXT.
5、清除屏幕右半区域:
┆
MOV AX,
MOV BH,7
MOV CX,0
MOV DX,
INT 10H
┆
6、 MOV CL,8
SHL AX,CL
SHR BX,CL
ADD AX,BX
MOV WORD PTR DATA1,AX
问:上述指令序列的功能是什么?
7、┆
MOV AL,N
MOV AH,35H
INT 21H
PUSH ES
PUSH BX
PUSH DS
MOV AX,SEG INTERHAND
MOV DS,OFFSET INTERHAND
MOV AL,N
MOV AH,25H
INT 21H
POP DS
┆
问:上述指令序列的功能是什么?
8、分别用一条语句实现下述指明的功能:
① 栈顶内容弹出送字变量MG1.
② 变量MG2类型属性送AH.
③ AX的内容加1,要求不影响CF.
④ 将EBX的低4位取反.
⑤ 若(CX)=0则转移至NEXT.
五、分析计算题:
1. 设(AX)=201BH,(BX)=110CH,(DI)=0001H,(DS)=4000H,(4110CH)=0AH,(4110DH)=81H,(4110EH)=70H;
则:① MOV AX,[BX]指令执行后,(AX)=;
② MOV BH,BYTE PTR[BX+DI+1],指令执行后,(BX)= .
2.
MOV AX,6540H
MOV DX,3210H
MOV CL,04
SHL AX,CL
MOV BL,AH
OR DL,BL
试问上述程序段运行后,
(AX)=
(BL)=
(DX)=
3、
DATA1 DW 1000H
DATA2 DW 2000H
┆
PUSH DATA1
PUSH DATA2
POP DATA1
POP DATA2
问:①上述程序段执行后,(DATA1)= ,(DATA2)=.
②设执行前(SP)=200H,执行后(SP)=.
4、 BUFF DB 7 , 6 , '56' ,?
ARRAY DW 0 , 67H , 7
BASUB EQU ARRAY-BUFF
问:BASUB的值是多少?它表示什么意义?
5、
MOV CL,3
MOV BX,0B7H
ROL BX,1
ROR BX,CL
问:上述程序执行完毕,BX寄存器的内容是什么?
6、
┆
.DATA
STRING1 DB 50,?,50 DUP(?)
NEXT:
LEA DX,STRING1
MOV AX,0AH
INT 21H
CMP STRING1+2,0DH
JE EXIT
JMP SHORT PTR NEXT
EXIT:
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN
说明上述指令序列的功能。
7.设(AX)=9A6CH,(BX)=710BH,(DI)=0002H,(DS)=6000H,(6710BH)=09H,(6710CH)=87H
(6710EH)=5EH;
则:① MOV AX,[BX]指令执行后,(AX)=;
② MOV BL,BYTE PTR[BX+DI+1],指令执行后,(BX)= .
8. OPER1 DB 1,2
OPER2 DW 1234H,5678H
则: 指令 ① MOV AX,WORD PTR OPER1+1执行后,(AX)=.
② MOV AL,BYTE PTR OPER2执行后,(AL)=.
③ MOV AH,SIZE OPER2执行后,(AH)=.
六:叙述题:
调用程序和子程序之间参数传递有哪几种主要方式? 各自的特点是什么?
简述8086CPU的中断响应过程。
简述子程序调用与宏调用工作方式的区别。
七:程序设计:
1、设X、Y、Z、W均为16位带符号数单元地址,写出执行下述计算的子程序。
Z=│X+Y-W│
2、编写汇编语言源程序:测试ALPHA字节变量单元中的ASCII码字符串,进行如下操作:
(1)若为数字字符,送入NUM字节单元中,置标记FLAG为0;
(2)若为大写字母字符,送入BICCHR字节单元中,置标记FLAG为0;
(3)若为小写字母字符,送入SMLCHR字节单元中,置标记FLAG为0;
(4)否则,置标记FLAG为1.
(字符0,9,A,Z,a,z的ASCII分别为30H,39H,41H,5AH,61H,7AH)
3、设X、Y、Z均为16位带符号数单元地址,写出执行下述计算的子程序。
X+Z ,X≥Z
Y=
X-Z ,X<Z
4、已知有256个字节整数a1,a2,a3,...,a256存放在以NUMBER为首地址的数据区中。编一程序将其中的负数去除后将剩下的正数重新顺序存放在以PLUS开始的数据区中。
5、 编写程序段。用串处理指令,比较两个有10个字符的字符串变量CHR1和CHR2,如果两者全不相同则执行子程序OTHER,否则,顺序执行。
6、编写汇编语言源程序: 设在字单元A、B和C中存放有三个数,若三个数都不为0,则求出三个数之和存入字单元D中,若有一个为0,则将其他两个单元也清零。
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)输入为‘*’
bdata db 01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah
sum db 00h
DATAS ENDS
STACKS SEGMENT
此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
此处输入代码段代码
xor si,si
mov al,bdata[si]
mov bl,0
mov cx,10
again:
add bl,bdata[si]
inc si
loop again
mov sum,bl
mov al,[sum]
and al,0f0h
mov cl,4
shr al,cl
add al,30h
cmp al,39h
jbe next
add al,07h
next: mov ah,02h
mov dl,al
int 21h
mov al,[sum]
and al,0fh
add al,30h
cmp al,39h
jbe next1
add al,07h
next1: mov ah,02h
mov dl,al
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START
2.偏移
3.4位
4.group
name
db(前两个不太确定,你再查一下吧)
5.CX
6.CALL
RET
7.MACRO
ENDM
宏体
8.
设DS=2200H,BX=1000H,SI=0100H,偏移量D=0A2B1H,试计算出下列各种寻址方式下的有效地址,填入括号中。
A.使用D的直接寻址
(0A2B1H
)
B.使用BX的寄存器间接寻址
(1000H)
C.使用BX和D的寄存器相对寻址(0B2B1H)
D.使用BX、SI和D的相对基址变址寻址
(0B3B1H)
E.使用BX、SI的基址变址寻址(1100H)
9.结束返回
10.CLD
STD
11.指出下一条将要被执行的指令在代码段中的偏移地址
12.0~255
00H~FFH
-128~127
80H~7FH
13.提供段地址
14.软件系统和硬件系统
15.SS
16.DI
17.初始化部分
循环部分
控制部分(这个也要查一下你们的教材,不同的教材可能不一样)
18.符号地址(这个不确定啊,查查教材吧)
19.数据段—ds
代码段—cs
附加段—es
堆栈段—ss
20.二进一
1.mov
ax,10
mov
bl,10
mov
cl,4
2.立即寻址
变址寻址
寄存器直接寻址
基址变址寻址
隐含寻址(或称为固定寻址)
问题补充:
1.C
2.D
汇编语言程序设计答案 资源大小: 79.28KB 资源类型: 发布人: hexieshangwang 发布日期: 1小时前 Tag: 汇编语言程序设计答案 资源分: 10 下载人数: 0 评论 收藏 举报 上传 国际软件工程师培养3周年成果展Moblin注册有礼第五期开始!【...
download.csdn.net/source/717221