汇编语言的特点
? 面向机器的低级语言,通常是为特定的计算机或计算机系列专门设计的。 ? 保持了机器语言的优点,具有直接和简捷的特点。
? 可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。 ? 目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ? 经常与高级语言配合使用,应用十分广泛。
1.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)
答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0 (2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0
(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0 (4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1 (5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1 (6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0
1.8 请写出下列字符串的ASCII码值。 For example,
This is a number 3692.
答:46H 6FH 72H 20H 65H 78H 61H 6DH 70H 6CH 65H 2CH 0AH 0DH
54H 68H 69H 73H 20H 69H 73H 20H 61H 20H 6EH 75H 6DH 62H 65H 72H 20H 33H 36H 39H 32H 2EH 0AH 0DH
3.1 给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么? (1) 立即寻址 (2) 直接寻址
(3) 使用BX的寄存器寻址 (4) 使用BX的简接寻址
(5) 使用BX的寄存器相对寻址 (6) 基址变址寻址 (7) 相对基址变址寻址
答:(1) 操作数在指令中,即立即数; (2) EA=D=7237H;
(3) 无EA,操作数为(BX)=637DH; (4) EA=(BX)=637DH; (5) EA=(BX)+D=0D5B4H; (6) EA=(BX)+(SI)=8E18H;
(7) EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。
1 / 16
3.8 假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?
(1) MOV AX, 0ABH (2) MOV AX, BX (3) MOV AX, [100H] (4) MOV AX, VAL (5) MOV AX, [BX] (6) MOV AX, ES:[BX] (7) MOV AX, [BP] (8) MOV AX, [SI]
(9) MOV AX, [BX+10] (10) MOV AX, VAL[BX] (11) MOV AX, [BX][SI] (12) MOV AX, VAL[BX][SI]
答:
(1) 立即寻址方式; 操作数在本条指令中 (2) 寄存器寻址方式; 操作数为 (BX)=0100H (3) 直接寻址方式; PA=20100H (4) 直接寻址方式; PA=20050H
(5) BX寄存器间接寻址方式; PA=20100H
(6) 附加段BX寄存器间接寻址方式; PA=21100H (7) BP寄存器间接寻址方式; PA=15010H (8) SI寄存器间接寻址方式; PA=200A0H (9) BX寄存器相对寻址方式; PA=20110H (10) BX寄存器相对寻址方式; PA=20150H
(11) BX和SI寄存器基址变址寻址方式; PA=201A0H (12) BX和SI寄存器相对基址变址寻址方式; PA=201F0H
3.36 假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q,(X和Y为低位字)试说明下列程序段做什么工作?
MOV DX, X+2 ;(DX) = (X+2) = PH MOV AX, X ;(AX) = (X) = PL ADD AX, X ;(AX) = (2*X) = 2PL ADC DX, X+2 ;(DX) = (2*(X+2))=2PH CMP DX, Y+2 ;2PH-QH
JL L2 ;2PH
JBE L2 ;2PL<=QL----->L2 L1: MOV AX, 1 ;(AX) = 1 JMP SHORT EXIT ;EXIT L2: MOV AX, 2 ;(AX) = 2 EXIT:INT 20H ;EXIT
答:此程序段判断p*2>q,则使(AX)=1后退出;p*2≤q,则使(AX)=2后退出。
2 / 16
3.37(序程功能3分,注释7分)
要求测试在status中的一个字节,如果第1,3,5位均为1则转移到routine_1,有2位为1则转移到routine_2,有1位为1则转移到routine_3,有0位为1则转移到routine_4 SUB AX,AX MOV DL,X TEST DL,01H JZ NEXT1 INC AL NEXT1: TEST DL,04H JZ NEXT2 INC AL NEXT2: TEST DL,10H JZ NEXT3 INC AL NEXT3: CMP AL,2 JG ROUTINE_1 CMP AL,1 JG ROUTINE_2 CMP AL,0 JG ROUTINE_3 JG ROUTINE_4 ROUTINE_1:MOV Y,1 JMP EXIT ROUTINE_2:MOV Y,2 JMP EXIT ROUTINE_3:MOV Y,3 JMP EXIT ROUTINE_4:MOV Y,4 EXIT: ret
4.5 画图说明下列语句所分配的存储空间及初始化的数据值。(不是原题) (1) BYTE_VAR DB ‘BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?) (2) WORD_VAR DW 5 DUP(0,1,2),?,-5,‘BY’,‘TE’,256H 答:
(1)BYTE_VAR DB 'BYTE',12,-12H,3 DUP(0,?,2 DUP(1,2),?)
42,59,54,45,0D,EE,00,?,01,02,01,02,?00,?,01,02,01,02,?,00,?,01,02,01,02,? (2)WORD_BAR DW 5 DUP(0,1,2),?,-5,'BY','TE',256H 00,00,01,00,02,00, 00,00,01,00,02,00, 00,00,01,00,02,00, 00,00,01,00,02,00,
3 / 16
00,00,01,00,02,00, ??,??,FB,FF,59,42, 45,54,56,02
4.14 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么? FLDB DB ?
TABLEA DW 20 DUP (?) TABLEB DB ‘ABCD’
(1) MOV AX, TYPE FLDB ;(AX)=0001H (2) MOV AX, TYPE TABLEA ;(AX)=0002H (3) MOV CX, LENGTH TABLEA ;(CX)=0014H (4) MOV DX, SIZE TABLEA ;(DX)=0028H (5) MOV CX, LENGTH TABLEB ;(CX)=0001H
5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。 DSEG DSEG CSEG
START:PUSH
BEGIN:MOV
COMP:ADD
CONS: CONS1:CMP
4 / 16
SEGMENT
MEM DW 100 DUP(?) ENDS SEGMENT
MAIN PROC FAR
ASSUME CS:CSEG,DS:DSEG,ES:DSEG DS
SUB AX,AX PUSH AX
MOV AX,DSEG MOV DS,AX MOV ES,AX SI,(100-1)*2 MOV BX,-2 MOV CX,100 BX,2 CMP MEM[BX] JZ CONS LOOP COMP JMP FINISH MOV DI,BX DI,SI
JAE NOMOV
MOV AX,MEM[DI+2] MOV MEM[DI],AX
NOMOV:MOV
FINISH:RET MAIN CSEG
ADD DI,2 JMP CONS1 WORD PTR[SI],0 LOOP COMP ENDP ENDS
END START
5.14 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放于AX和CX中。
TABLE DW 100H DUP(?) DATA DW ? COUNT DW 0 BEGIN:MOV BX,100H MOV DI,0 NEXT: MOV DX,0 MOV SI,0 MOV AX,TABLE[DI] MOV CX,100H COMP: CMP TABLE[SI],AX JNE ADDR INC DX ADDR: ADD SI,2 LOOP COMP CMP DX,COUNT JLE DONE MOV COUNT,DX MOV DATA,AX DONE: ADD DI,2 DEC BX JNZ NEXT MOV CX,COUNT MOV AX,DATA RET
5.18 把0~100D之间的30个数存入以GRADE为首地址的30字数组中,GRADE+i表示学号为i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。(提示:一个学生的名次等于成绩高于这个学生的人数加1。)
5 / 16
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编考试重点20题 docx在线全文阅读。
相关推荐: