计算机原理及应用作业答案.pdf

上传人:scccc 文档编号:11335256 上传时间:2021-07-26 格式:PDF 页数:24 大小:825.28KB
返回 下载 相关 举报
计算机原理及应用作业答案.pdf_第1页
第1页 / 共24页
计算机原理及应用作业答案.pdf_第2页
第2页 / 共24页
计算机原理及应用作业答案.pdf_第3页
第3页 / 共24页
计算机原理及应用作业答案.pdf_第4页
第4页 / 共24页
计算机原理及应用作业答案.pdf_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《计算机原理及应用作业答案.pdf》由会员分享,可在线阅读,更多相关《计算机原理及应用作业答案.pdf(24页珍藏版)》请在三一文库上搜索。

1、 - 1 - 计算机原理及应用作业参考解答计算机原理及应用作业参考解答 3. 将下列二进制数转换为十进制数: 101101100B 200101101B 30.011B 40.01101B 51001.1001B 解:解:51001.1001B810.50.06259.5625D 4. 将下列十进制数转换为二进制数: 117D 2121D 30.4375D 40.59375D 5125.125D 解:解:5125.125D 2625242322202-31111101.001B 7. 将下列各数转换为十六进制数: 111010100B 200111100B 30.0001101B 411101

2、01.101111B 5783D 65372D 79570D 89587D 解:解:41110101.101111B75.BCH 8. 将下列十六进制数转换为二进制数: 12B7CH 22EFDH 31AB0H 40.56F8H 54DE.ACH 解:解:54DE.ACH 10011011110.101011B 9. 将下列十六进制数转换为十进制数: 1A8CH 2FFH 31000H 4F001H 5FFFFH 解:解:1A8CH 10*162 8*16 12 2700D 12. 将下列十进制数分别用八位原码、反码和补码表示: 1+15 2-15 3-64 4+117 5-6 6-120 解

3、:解: 原码原码 反码反码 补码补码 4117 01110101 01110101 01110101 56 10000110 11111001 11111010 13. 求下列补码数的十进制值: 100110011 210101011 310000101 400000101 511111011 600000000 711111111 810000000 解:解:1因为因为 00110011 是正数,所以补码和原码相等,对应的十是正数,所以补码和原码相等,对应的十 进制数为进制数为 2524212032+16+2+1= +51D 5因为因为 11111011 是负数,所以补码等于反码加是负数,所

4、以补码等于反码加 1,对应的反码为,对应的反码为 1111010,对应的,对应的 原码为原码为 1000101,所以其十进制数为所以其十进制数为 (222120) 5D 15. 已知 X,Y 的值如下,求 X 补, Y 补, X+Y 补, X-Y 补,并说明结果有无溢 出,设补码都用八位表示,减法仍直接用减运算。 - 2 - 1X=45,Y=85 2X=45,Y=-85 3X=-45,Y=85 4X=-45,Y=-85 解:解: X补补 Y补补 X+Y补补 X-Y补补 1 00101101B 01010101B 10000010B 127 (溢出)(溢出) 11011000B (无溢出)(无溢

5、出) 2 00101101B 10101011B 11011000 (正加负, 无溢出)(正加负, 无溢出) 10000010 (溢出)(溢出) 3 11010011B 01010101B 00101000 (无溢出)(无溢出) 01111110 (溢出)(溢出) 4 11010011B 10101011B 01111110 (溢出)(溢出) 00101000 (无溢出)(无溢出) 16. 查 ASCII 代码表,将下列字符转换为 8 位 ASCII 代码,并用十六进制表示: 15 2A 3a 4= 5?6* 解:查解:查 ASCII 代码表得:代码表得: 1 5 = 35H = 001101

6、01B 2 A= 41H = 01000001B 3 a = 61H = 01100001B 17. 查 ASCII 代码表,将下列 7 位 ASCII 代码,转换为相应字符(假设最高位都为 0): 10100001 20111001 31010111 41100101 51111011 解:查解:查 ASCII 代码表得:代码表得: 2 0111001 = 39H =9 4 1100101 = 65H =e 18. 写出下列存储器地址的段基址,偏移地址和物理地址: 12314H:0035H 21FD0H:000AH 360ADH:DDF6H 解:物理地址:解:物理地址:123175H 21F

7、D0AH 3 该存储器地址的该存储器地址的 段基址为段基址为 60ADH; 偏移地址为偏移地址为 DDF6H; 物理地址为:物理地址为:60AD0H + DDF6H = 6E8C6H 19. 某一存储单元的物理地址为 12345H,试完成下列不同的逻辑地址表示: 11234H: H 2 H:0345H 解:解: 1 1234H :0005H 12345 12340 =5 2 1200H :0345H 12345 345 = 12000 20. 假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H, 数据变量 VA

8、L 的偏移地址为 0050H, 试指出下列指令的源操作数是什么寻址方式?若是内存 操作数则计算它的物理地址(用十六进制数表示)。 1MOV AX,0ABH 2MOV AX,BX 3MOV AX, 100H 4MOV AX, BP+10H 5MOV AX,ES: BX 6MOV AX, SI 7MOV AX, BP 8MOV AX,VAL BP 9MOV AX,1100H BX SI 解:解: (1)立即寻址,没有物理地址)立即寻址,没有物理地址 (2)寄存器寻址,没有物理地址)寄存器寻址,没有物理地址 (3)直接寻址,物理地址)直接寻址,物理地址DS:100H=20100H - 3 - (4)

9、基址寻址,物理地址)基址寻址,物理地址SS:BP+10H=15020H (5)段超越的段超越的间址寻址,物理地址间址寻址,物理地址ES:BX=21100H (6)间址寻址,物理地址)间址寻址,物理地址DS:SI=200A0H (7)间址寻址,物理地址)间址寻址,物理地址SS:BP=15010H (8)基址寻址,物理地址)基址寻址,物理地址SS:BP+VAL=15060H (9)基址加变址寻址,物理地址)基址加变址寻址,物理地址DS:SI+BX=212A0H 21. 假定有关寄存器及存储单元的内容如下:(DS)=2000H, (BX)=0100H,(SI)=0002H, (20100H)=12H

10、,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH, (21202H)=0B7H,(21203H)=65H,试指出下列各条指令执行完后 AX 寄存器的内容。 1MOV AX,1200H 2MOV AX,BX 3MOV AX, 1200H 4MOV AX, BX 5MOV AX,1100H BX 6MOV AX,1100H BX SI 解:解:AX 寄存器的内容寄存器的内容是两个字节!是两个字节! (得到的物理地址是它的低字节地址,(得到的物理地址是它的低字节地址,高字节地址加高字节地址加 1。)。) 事实上,一个字

11、的地址就是其低字节的地址。事实上,一个字的地址就是其低字节的地址。 (1)(AX)=1200H (2)(AX)=100H (3)(AX)=4C2AH (4)(AX)=3412H (5)(AX)=4C2AH (6)(AX)=65B7H 22. 指出下列指令的错误: 1MOV AH,BX 2MOV BX , SI 3MOV AX, SI DI 4MOV CS,AX 解:(解:(1)错误:)错误: 数据类型不一致,数据类型不一致,AH 为为 8 位,位,BX 为为 16 位。位。 (2)错误:源操作数和目标操作)错误:源操作数和目标操作数不能同为内存操作数。数不能同为内存操作数。 (3)错误:不能用

12、两个变址寄存器。)错误:不能用两个变址寄存器。 (4)错误:不能给)错误:不能给 CS 赋值。赋值。 23. 用几条指令完成下列功能: 1 把 BX 寄存器和 DX 寄存器的内容相加,结果存入 DX 寄存器中。 2 用寄存器 BX 和 SI 的基址变址寻址方式,把存储器中的一个字节与 AL 寄存器的内 容相加,结果存入 AL 寄存器中。 3 用寄存器 BX 和位移量 0B2H 的基址寻址方式,把存储器中的一个字与(CX)相加,结 果送回存储单元中。 4 用位移量 0524H 的直接寻址方式,把存储器中的一个字与数 2A59H 相加,并把结果 送回存储单元中。 5 把数 0B5H 与(AL)相加

13、,结果送回 AL 中。 解:(解:(1)ADD DX, BX (2)ADD AL, BYTE PTR BX SI (3)ADD WORD PTR 0B2H BX, CX (4)ADD WORD PTR 524H, 2A59H (5)ADD AL, 0B5H - 4 - 25. 设段寄存器(SS)=3A4BH,程序中要求堆栈长度为 200 个字节,试计算出堆栈指针 SP 的 初始值(即堆栈中没有数据时)和 SP 初始值指向的物理地址。 解:解: 因为堆栈长度为因为堆栈长度为 200 个字节,所以堆栈指针个字节,所以堆栈指针 SP 的初始值的初始值 为为 SP200 其初始值指向的物理地址为:其初

14、始值指向的物理地址为: 3A4B0 H + 200 D= 3A4B0H + C8H = 3A578H 27. 指出下列指令哪些是错误的,若有错误请说明错在何处? 1CMP 15H,BX 2CMP 2000H ,25 3CMP 100H ,200H 4CMP AX, 3050H 解:(解:(1)错误:目标操作数不能为立即数。)错误:目标操作数不能为立即数。 (2)错误:应指明内存操作数的类型)错误:应指明内存操作数的类型 (3)错误:不能目标和源同为内存操作数错误:不能目标和源同为内存操作数 (4)若原来已定义内存操作数为字类型,则没错。)若原来已定义内存操作数为字类型,则没错。 最好显式写出:

15、最好显式写出:CMP AX, WORD PTR 3050H 28. 求 62A0H 分别与下列各数相加的结果,并根据结果设置标志位 SF,ZF 和 OF 的值。 11234H 24321H 3CFA0H 49D60H 解:(解:(1)62A0H+1234H = 74D4H SF=0,ZF =0, OF=0 (2)62A0H+4321H = A5C1H SF=1,ZF =0, OF=1 (3)62A0H+CFA0H =3240H SF=0,ZF =0, OF=0 (4)62A0H+9D60H = 0000H SF=0,ZF =1, OF=0 29.1用一条逻辑运算指令使 AX 清零。 2用一条逻

16、辑指令使 DX 的高 3 位为 1,其余位不变。 3用一条逻辑指令使 BL 的低 4 位为 0,其余位不变。 4用一条逻辑指令使 AX 中各位与 BX 对应位不相同的都变成 1,相同的位不变。 解:解:1 XOR AX, AX 2 OR DX, 1110 0000 0000 0000B 3AND BL, 11110000B 4OR AX, BX 30. 用两条移位及循环移位指令,将 AL 中的各位按相反的顺序各位按相反的顺序排列到 AH 中。 解:解: MOV CX, 8 LOOP1: SHL AL, 1 ; AL 逻辑左移逻辑左移 1 位,最高位进入位,最高位进入 CF RCR AH, 1

17、; 将将 AH 中的数与中的数与 CF 一起向右循环移动一起向右循环移动 1 位位 LOOP LOOP1 INT 3 31. 假定(DX)=10111001B,(CL)=03,(CF)=1,试确定下列各条指令分别执行后,DX 中的值。 1SHR DX, 1 2SAR DX,CL 3SHL DX,CL 4ROR DX,CL - 5 - 5ROL DL, CL 6SAL DH,1 7RCL DX,CL 8RCR DL,1 解:解: 注意:注意:DX=10111001B, 理解为高理解为高8位零略写。位零略写。 (1)()(DX)= 0000 0000 0101 1100B = 005CH (2)(

18、)(DX)= 0000 0000 0001 0111B = 0017H (3)()(DX)= 0000 0101 1100 1000B = 05C8H (4)()(DX)= 0010 0000 0001 0111B = 2017H (5)()(DX)= 0000 0000 1100 1101B = 00CDH (6)()(DX)= 0000 0000 1011 1001B = 00B9H (7)()(DX)= 0000 0101 1100 1100B = 05CCH (8)()(DX)= 0000 0000 1101 1100B = 00DCH 32. 用两条移位及循环指令将 DX:AX 中的

19、双字长无符号数乘以 2。 解:解: SHL AX,1 ;低字逻辑左移一位,;低字逻辑左移一位,AX 的最高位进入的最高位进入 CF RCL DX,1 ;高字带进位循环左移一位,;高字带进位循环左移一位,CF 进入进入 DX 的最低位的最低位 34. 在下列程序段中,L1L5表示 5 个程序标号。如果 AX 和 BX 的内容取列表中 5 组不同 的数值,试分别分析该程序执行完成后,各自转向哪里?: ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4 JMP L5 解:解: 35.指令 CMP AX,BX 后面跟着一条格式为 J.L1 的条件转移指令,其

20、中.可以是 B,NB, BE,NBE,L,NL,LE,NLE 中的任一个,如果 AX 和 BX 的内容给定如下: AX BX AX BX 1 1F52 1F52 5 FFC5 FF8B 2 88C9 88CA 6 09A0 1E97 3 FF82 007E 7 8AEA FC29 4 58BA 020E 8 D367 32A6 问以上 8 条转移指令中的哪几条将引起转移到 L1? AX BX 1 147B 80DC 2 B568 54B7 3 42C8 608D 4 D023 9FD0 5 94B7 B568 AX BX ADD SUB 1 147B 80DC CF=0, OF=0 (转转 L

21、1) 2 B568 54B7 CF=1, OF=0 (转转 L1) 3 42C8 608D CF=0, OF=1 (转转 L2) 4 D023 9FD0 CF=1, OF=1 CF=1, OF=1(转转 L5) 5 94B7 B568 CF=1, OF=1 CF=1, OF=1 (转转 L5) - 6 - 解:解: AX BX CMP AX, BX 转到转到 L1 1 1F52 1F52 ZF=1,CF=0, SF=OF=0 NB / BE , NL / LE 2 88C9 88CA ZF=0,CF=1, SF=1,OF=0 B / BE , L / LE 3 FF82 007E ZF=0,C

22、F=0, SF=1,OF=0 NB / NBE , L / LE 4 58BA 020E ZF=0,CF=0, SF=0,OF=0 NB /NBE , NL / NLE 5 FFC5 FF8B ZF=0,CF=0, SF=0,OF=0 NB /NBE , NL / NLE 6 09A0 1E97 ZF=0,CF=1, SF=1,OF=0 B / BE , L / LE 7 8AEA FC29 ZF=0,CF=1, SF=1,OF=0 B / BE , L / LE 8 D367 32A6 ZF=0,CF=0, SF=1,OF=0 NB / NBE , L / LE 36 .两个 4 位压缩的

23、BCD 数,存放在存储器中的地址为 ALPHA 和 BETA,编写程序求两个 数的和,结果存入 ALPHA 单元。 解:解:DATA SEGMENT ALPHA DB 34H, 12H ;压缩的压缩的 BCD 数数 1 字节表示字节表示 2 位,位,4 位应占位应占 1 个字。用个字。用 DW 的的 可读性更好,但后面只能用字节加。可读性更好,但后面只能用字节加。 BETA DB 52H, 46H DATA ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STA

24、CK START: MOV AX, DATA MOV DS, AX MOV SI, 0 ;为什么要将;为什么要将 si 设为设为 0 lea si alpha 这样写一样吗这样写一样吗 MOV CX, 2 ;循环两次;循环两次 CLC LOOPER: MOV AL, ALPHA SI ADC AL, BETA SI ;都默认的是从头开始放吗?;都默认的是从头开始放吗? DAA MOV ALPHA SI, AL INC SI DEC CX ;也可以和下面可以合起来改成也可以和下面可以合起来改成 LOOP LOOPER JNZ LOOPER ;cx 不为不为 0 则转移到则转移到 LOOPER C

25、ODE ENDS END START 39. 比较 AX,BX,CX 中带符号补码数的大小,将其最大者放在 AX 中,试编写此程序。 解:解:DATA SEGMENT DATA1 DW 4142H - 7 - DATA2 DW 8107H DATA3 DW 0A123H MAX DW ? DATA ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX MOV AX, DATA1 MOV BX,

26、DATA2 MOV CX, DATA3 法法 一:一: MOV MAX, AX CMP BX, MAX ;CMP 不是比较无符号数的吗,不是比较无符号数的吗, JG GREAT1 NEXT: CMP CX, MAX JG GREAT2 ;SF=OF 且且 ZF=0,表明前者大,表明前者大 JLE GOON ;SF 不等于不等于 OF 或或 ZF=1,相等或后者大,相等或后者大 GREAT1: MOV MAX, BX JMP NEXT GREAT2: MOV MAX, CX GOON: MOV AX, MAX 法法 二:更好,不仅少占用资源,而且快二:更好,不仅少占用资源,而且快 CMP AX,

27、BX JGE NEXT1 XCHG AX,BX NEXT1: CMP AX, CX JGE NEXT2 XCHG AX,CX NEXT2: MOV MAX, AX CODE ENDS END START - 8 - 40. 编写程序, 将 BLOCK 中的 100 个字节数据的位置颠倒过来(即第 1 个字节和第 100 个字 节的内容互换,第 2 个字节和第 99 个字节的内容互换,)。 解:解: MOV CX, 50 ;循环次数循环次数 LEA SI, BLOCK MOV AX, SI ADD AX, 99 MOV DI, AX TOP: MOV AL, BLOCKSI ;也可以取一个到也可

28、以取一个到 AL 后和内存后和内存 XCHG MOV BL, BLOCKDI MOV BLOCKDI, AL MOV BLOCKSI, BL INC SI DEC DI LOOP TOP 41. 编写程序,求 AX 寄存器中有多少个“1”,并将其个数存入 CL 寄存器中。 解:解: XOR BL, BL MOV CX, 16 COUNT: SHL AX, 1 JNC GOON NEXT: INC BL GOON: LOOP COUNT ;事实上,某次移位后;事实上,某次移位后 AX0 就可以退出了就可以退出了 MOV CL,BL 43. 下列变量各占多少字节字节? 1ALPHA DW 25H,

29、36H 2BETA DB 4 DUP(?) 3GAMMA DD 10 DUP(1250H,12345678H) 4COUNT DB 5 DUP(4 DUP(3,2,ABC) 解:解:1 224 2 144 3 410280 4 154(23)100 44. 下列指令各完成什么功能? 1MOV AX,00FFH AND 122H+2233H 2MOV AL,15 GE 1111B 3MOV AX,4500H OR 0035 AND 00FFH 4MOV AH,0FFH LE 255+6/5 - 9 - 5OR AL,50 MOD 4+20 解:解:1AX = (0000 0000 1111 11

30、11 或或 ROR AL,CL (2) 若用若用 NEG 指令求相反数,则可:指令求相反数,则可: NEG BX ADC AX,0 ; 加上可能产生的进位加上可能产生的进位 CF NEG AX ; 0 ( (AX+CAX+CF F)=0)=0AX AX - - C CF F 若理解求相反数为连符号位带数值位取反再末位加若理解求相反数为连符号位带数值位取反再末位加 1 ,则可:,则可: NOT AX NOT BX ADD BX,1 ADC AX,0 ; 这种算法最后这种算法最后 CF 和和 NEG 的相反的相反 (3) OR CX,1 - 10 - 47. 指令 AND AX,1234H AND

31、 5678H 中,两个 AND 操作有什么区别? 解:前一个解:前一个 AND 是是 运算指令,在执行指令时完成;运算指令,在执行指令时完成;AND AX,1230H 后一个后一个 AND 是汇编运算中的逻辑运算,是汇编运算中的逻辑运算, 在汇编时完成。在汇编时完成。1234H AND 5678H = 1230H 49. 编写一个完整的程序, 要求把数据段 DSEG 中的双字数 X 和附加段 ESEG 中的双字数 Y 相加,结果存放在 DSEG 中的 SUM 中,代码段为 CSEG。 解:解:DSEG SEGMENT X DD 12345678H ;双字;双字 SUM DD ? ;双字;双字

32、DSEG ENDS ESEG SEGMENT Y DD 34567890H ;双字;双字 ESEG ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG, ES:ESEG,SS:STACK MOV AX, DSEG MOV DS, AX MOV AX, ESEG MOV ES, AX MOV AX,WORD PTR X ;转类型引用,一定要写转类型引用,一定要写 WORD PTR ADD AX, WORD PTR ES:Y; 一定要写一定要写 ES:,否则默认,否则默认 DS

33、: MOV WORD PTR SUM, AX; 转类型存储,一定要写转类型存储,一定要写 WORD PTR MOV AX,WORD PTR X+2 ; 地址是按字节计算,所以地址是按字节计算,所以+2 才指向高位字,才指向高位字, ADC AX,WORD PTR ES:Y+2 ; 带低位字的进位加带低位字的进位加 MOV WORD PTR SUM+2, AX; 最后的进位没有考虑最后的进位没有考虑 MOV AH,4CH INT 21H CSEG ENDS 48. 编写程序,把三个连续存放的单字节带符号整数,按递增次序重新存放在原来的三个存 储单元中。 解:最直接的做法:解:最直接的做法: DA

34、TA SEGMENT DATA1 DB 12H DATA2 DB 56H DATA3 DB ? DATA ENDS STACK SEGMENT STACK DB 100 DUP(?) - 11 - STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX MOV AL, DATA1 MOV BL, DATA2 MOV CL, DATA3 CMP AL,BL JGE NEXT1 ;带符号数用带符号数用 JG,若用,若用 JA 就错了就错了 XCHG AL,BL NEXT1: C

35、MP AL, CL JGE NEXT2 XCHG AL,CL NEXT2: CMP BL, CL JGE NEXT3 XCHG BL, CL; 至此至此 AL BL CL NEXT3: MOV DATA1, CL; 按递增顺序存储按递增顺序存储 MOV DATA2, BL MOV DATA3, AL CODE ENDS END START 附其他解法如下:附其他解法如下: DATA SEGMENT DAT DB 5,-7,100 DATA ENDS STACK1 SEGMENT STACK DB 100H DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CO

36、DE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX LEA SI,DAT MOV CX,2 L1: MOV AL,SI CMP AL,SI+1 JNG L2 XCHG AL,SI+1 MOV SI,AL - 12 - L2: INC SI LOOP L1 MOV AH,4CH INT 21H CODE ENDS END START ;此程序做完,只能保证最大的一个排在最后面,但若原来的第二、第三个发生过交换,则此程序做完,只能保证最大的一个排在最后面,但若原来的第二、第三个发生过交换,则 第一个和第三个还没比较过。所以应该再作一次新的第一、第二个

37、之间的比较。程序修改第一个和第三个还没比较过。所以应该再作一次新的第一、第二个之间的比较。程序修改 如下。如下。 START: MOV AX,DATA MOV DS,AX LEA SI,DAT MOV CX,2 L1: MOV AL,SI CMP AL,SI+1 JNG L2 XCHG AL,SI+1 MOV SI,AL L2: INC SI LOOP L1 MOV AL,DTA :比较新的一、二元素比较新的一、二元素 CMP AL,DTA1 JNG DONE XCHG AL, DTA1 MOV DTA,AL DONE: MOV AH,4CH INT 21H ;此程序可以改成一个二重循环如下。

38、这样还可以适应更多个数的排序:此程序可以改成一个二重循环如下。这样还可以适应更多个数的排序: DATA SEGMENT DT1 DB 07FH, 56H, 80H DATA ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CH,2 LP1: MOV CL,CH LEA SI,DT1 LP2: MOV AL,SI - 13 - INC SI CMP AL,SI JNG NEXT1 XCHG

39、AL,SI MOV SI-1,AL NEXT1: DEC CL ;内循环控制内循环控制 JNZ LP2 DEC CH ;外循环控制外循环控制 JNZ LP1 DONE: MOV AH,4CH INT 21H CODE ENDS END START 52. 设字节变量 X 为带符号整数,试按下面要求编写出程序: 1如果 X 的绝对值大于 5,将变量 FX 赋值为零; 2如果 X 的绝对值不大于 5,将变量 FX 赋值为 1-X。 解:解: X DB -5 FX DB ? 法法 一:一: MOV FX, 0; 先赋一个值先赋一个值 0,使后面的分支简单,使后面的分支简单 CMP X, 5 JG D

40、ONE; 带符号数必须用带符号数必须用 JG、JL,不能用无符号数的,不能用无符号数的 JA、JB CMP X, -5; 汇编语言源程序中可以直接用汇编语言源程序中可以直接用-5 这种形式这种形式 JL DONE MOV AL, 1 SUB AL, X MOV FX, AL DONE: INT 3 法法 二:二: MOV FX, 0 MOV AL, X; 取到取到 AL 中变换,以免破坏中变换,以免破坏 X。而且在。而且在 AL 中运算还快中运算还快 AND AL, 0FFH ;区分正负数;区分正负数 JNS L1 NEG AL ; 负数变绝对值,正数就不能做这条指令负数变绝对值,正数就不能做

41、这条指令 L1: CMP AL, 5 ; 至此至此 X 已经是绝对值,可以看成无符号数已经是绝对值,可以看成无符号数 JA DONE; 若用了若用了 JG,从概念上稍错一点从概念上稍错一点 MOV AH, 1 SUB AH, X; MOV FX, AH DONE: INT 3 54. 设有一段英文以$结束,其字符变量名为 ENG。编写一段程序,检查单词 SUN 在 - 14 - 该文中出现的次数,结果存入 AL 中。 解:法解:法 一:一: DATA SEGMENT WOD DB SUN ENG DB sunSUNSUAFSSSUN$ MES1 DB NO SUN!,0DH,0AH,$ ; 提

42、示信息提示信息 DATA ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX CLD LEA DI,ENG MOV AL,$ MOV CX,0FFH REPNE SCASB ; 最后的最后的 B 不可少不可少 NEG CL SUB CL,2 ; 求补后减求补后减 2 得不包括得不包括$的串长。的串长。 LEA DI,ENG ; 串指针串指针 XOR AH,AH ; 匹匹配次数清零配

43、次数清零 BG1: MOV BX,ENG-WOD ; 单词长单词长 CMP CX,BX ; 串长够单词长吗串长够单词长吗? JB DON; 不够则结束不够则结束 LEA SI,WOD ; 单词指针单词指针 BG2: MOV AL,SI ; 取单词中第一个字母取单词中第一个字母 INC SI ; REPNE SCASB ; 在串中搜索第一个字母在串中搜索第一个字母,过程中会过程中会 CX1 JNE DON ; 始终未找到第一个字母始终未找到第一个字母 NEXT: DEC BX ; 找到一个字母后,单词字母数减一找到一个字母后,单词字母数减一 JNZ NEXT1 ; 不是不是单词的最后字母,则继续

44、找单词后续字母单词的最后字母,则继续找单词后续字母 INC AH ; 是单词的最后字符,则匹配次数加是单词的最后字符,则匹配次数加 1 JMP BG1; 接着在剩下的串中再从单词的第一个字母开始下一轮搜寻接着在剩下的串中再从单词的第一个字母开始下一轮搜寻 NEXT1: CMP CX,BX ; 串剩下的字母数够单词剩下的长度吗?串剩下的字母数够单词剩下的长度吗? JB DON; 不够则结束不够则结束 NEXT2: MOV AL,SI ; 取单词中下一个字母取单词中下一个字母 INC SI ; 指向再下一个字母指向再下一个字母 CMP AL,DI; 在剩下的串中比较单词的下一个字母在剩下的串中比较

45、单词的下一个字母 JNE BG1 ; 不匹配,从第一个字母搜索不匹配,从第一个字母搜索 INC DI ; 串中下一个字母串中下一个字母 DEC CX ; 串长减一串长减一 - 15 - JMP NEXT ; DON: MOV AL,AH AND AL,AH JNZ DONE LEA DX,MES1 MOV AH,9 INT 21H DONE: MOV AH,4CH INT 21H CODE ENDS END START 法法 二:二: DATA SEGMENT ENG DB ABDSUNDSDSUN TST DB SUN DATA ENDS STACK SEGMENT STACK DB 100

46、 DUP (?) STACK ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, ES: DATA, SS: STACK START: MOV AX, DATA MOV DS, AX MOV ES, AX LEA DI, ENG LEA SI, TST MOV CX, TST-ENG ;字符串的长度字符串的长度 MOV BX, 3 MOV AH, 0 N2: CMP CX, BX JC EXIT MOV AL, SI CLD ;清方向标志清方向标志 REPNZ SCASB ;字符扫描字符扫描 JCXZ EXIT INC CX CMP CX, BX JC EXIT PUSH DI PUSH SI INC SI PUSH CX MOV CX, BX - 16 - DEC CX REPZ CMP

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1