清华大学汇编语言第二版习题答案_第1页
清华大学汇编语言第二版习题答案_第2页
清华大学汇编语言第二版习题答案_第3页
清华大学汇编语言第二版习题答案_第4页
清华大学汇编语言第二版习题答案_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章1.1 (如果十六进制数的最高位是字母 (如:A , B , 则应在其前面加 0(零 , 如本题 (3 (1369D=1 0111 0001B=171H(210000D=10 0111 0001 0000B=2710H(34095D=1111 1111 1111B=0FFFH(432767D=111 1111 1111 1111B=7FFFH1.2(110 1101B=2DH=45D(21000 0000B=80H=128D(31111 1111 1111 1111B=0FFFFH=65535D(41111 1111B=0FFH=255D1.3(10FAH=1111 1010B=250D

2、(25BH=101 1011B=91D(30FFFEH=1111 1111 1111 1110B=65534D(41234H=1 0010 0011 0100B=4660D1.4(1 3AH+0B7H=0F1H(2 1234H+0AFH=12E3H(3 0ABCDH-0FEH=0AACFH(57AB×6FH=35325H1.5(1 (-85D+76D=1010 1011B+0100 1100B=1111 0111B=0F7H(2 85D+(-76D=0101 0101B+1011 0100B=0000 1001B=09H(3 85D-76D=0101 0101B+1011 0100B

3、=0000 1001B=09H(4 85D-(-76D=0101 0101B+0100 1100B=1010 0001B=0A1H(5 (-85D -76D=1010 1010B+1011 0100B=0101 1111B=5FH(6-85D -(-76D=1010 1011B +0100 1100B=1111 0111B=0F7H1.6(10D8H如果它被看作带符号数,则它表示 -40D ;如果它被看作无符号数,则它 216D 。(20FFH如果它被看作带符号数,则它表示-1D ;如果它被看作无符号数,则它 255D 。1.7(14FH, 79D, O(22BH, 43D, +(373H,

4、115D, s(459H, 89D, Y1.8(1For example,46H 6FH 72H 20H 65H 78H 61H 6DH 70H 6CH 65H 2CH(2This is a number 3692.54H 68H 69H 73H 20H 69H 73H 20H 61H 20H 6EH 75H 6DH 62H 65H 72H 20H 33H 36H 39H 32H 2EH第二章2.1256个2.2E5H 000B0H1EH 000B1H000B2H3CH 000B3H2AH 000B4H2.330022H 和 30024H 字节单元的内容分别为(30022H =0ABH(300

5、24H =0EFH30021H 和 30022H 字单元的内容分别为(30021H =0AB34H(30022H =0CDABH2.4逻辑地址为 3017:000A的存储单元的物理地址为 3017AH 。逻辑地址为 3015:002A的存储单元的物理地址为 3017AH 。逻辑地址为 3010:007A的存储单元的物理地址为 3017AH 。2.50AAA40H2.7(1AX, BX, CX, DX, SI, DI(2CX(3AX, BX, CX, DX, SI, DI(4CS, DS, SS, ES(5FLAGS(6CS, IP(7SS, SP, BP2.8指示存储器地址的寄存器如下所示段

6、偏移CS IPSS SP, BPDS BX, DI, SIES DI2.91.(M 2.(C 3.(D 4.(B 5.(A 6.(L 7.(K 8.(J 9.(F 10.(H 11.(G 12.(E 13.(I 14.(O 15.(N第三章1。. (1立即寻址 没有(2直接寻址 7237H(3使用 BX 的寄存器寻址 没有(4使用 BX 的间接寻址 637DH(5使用 BX 的寄存器相对寻址 0D5F0H(6 基址变址寻址 8E18H(7相对基址变址 004FH2。根据下列要求,写出相应的汇编指令。(1 ADD DX,BX(2 ADD AL,BXSI(3 ADD BX0B2H, CX(4 MO

7、V AX,2A59H ADD 0524H ,AX(5 ADD AL ,0B5H3。(1寄存器间接寻址MOV BX,OFFSET BLOCK0AHMOV DX ,BX(2寄存器相对寻址MOV SI,OAHMOV DX,BLOCKSI(3基址变址寻址MOV BX ,BLOCKMOV SI,OAHMOV DX,BXSI4。 现 有 (DS =2000H,(BX=0100H,(SI=0002H,(20100=12H,(20101=34H,(20102=56H,(20103=78H,(2120 0=2AH,(20201=4CH,(21202=B7H,(21203=65H,试说明下列各条指令执行完后, A

8、X 寄存器 的内容。(1 MOV AX,1200H 1200H(2 MOV AX,BX 0100H(3 MOV AX,1200 4C2AH 注意,是字单元! !(4 MOV AX,BX 3412H 同上(5 MOV 1100BX 4C2AH(6 MOV AX,BXSI 7856H(7 MOV AX,1100BXSI 65B7H5。(1 7CD9H (2 1200H (3 6319H6。 MOV BX,2000HLES DI ,BXMOV AX, ES:DI7。转向地址 OBJ 的值分别为:(1 064DH (20691H (305E0H 注意有符号数的符号位 8。 (1 MOV AX,0ABH

9、 立即数寻址 无物理地址(2 MOV AX,BX 寄存器寻址 同上(3 MOV AX,100 直接寻址 20100H(4 MOV AX,VAL 直接寻址 20050H(5 MOV AX,BX 寄存器间接寻址 20100H(6 MOV AX,ES:BX 直接寻址 21100H(7 MOV AX,BP 寄存器间接寻址 20010H(8 MOV AX,SI 同上 200A0H(9 MOV AX,BX+10 寄存器相对寻址 20110H (10 MOV AX,VALBX 同上 20150H (11 MOV AX,BXSI 基址变址寻址 201A0H (12 MOV AX,VALBXSI 相对基相变址寻

10、址 201F0H 9。(1的指令:MOV AX, BX0CH MOV ZREO ,AX(2 的指令:MOV AX,ARRAYBX MOV ZREO,AX10。 MOV AX,TABLE 是把符号地址 TABLE 里的内容送到 AX 里,指令执行完后, (AX=1234HLEA AX,TABLE 是把符号地址 TABLE 的有效地址(这里是偏移量送到指定寄 存器 AX 里,指令执行完后, (AX =0032H11。执行完指令后, (AX =1E00H12。 LEA AX,CSTRINGMOV DL,AXMOV DH,AX+613。这个, ,图,很麻烦了,所以就不画了 大家可以看一下课本上 P51

11、-P53,很清楚,看 完了这道韪也会了 14。 LES BX,2000MOV AX,ES:BX注意:一开始我写的是:MOV AX,ES:8000H, 后来看到题目里要求写两条指令, 所以 一条就不行了,就要画蛇添足 15。 运算结果 SF,ZF,CF,OF 各位的值 (从左至右依次往下 (1 74D4H 0 0 0 0(2 A5C1H 1 0 0 1(3 4240 H 0 0 1 0(4 0000 H 0 1 1 016。 接上表 (1 5D14 0 0 0 0(2 A870 1 0 0 1(3 D870 1 0 0 0(4 34E4 0 0 1 017。(1.MOV AX,Z ;把 Z 送到

12、 AXSUB AX,X ; Z-XADD AX,W ; W+(Z-XMOV Z,AX ;结果保存在 Z 中(2. MOV AX,R ; R 送到 AX 中ADD AX,9 ; R+9MOV BX,X ; X 送到 BX 中ADD BX,6 ; X+6ADD AX,BX ; (R+9 +(X+6,结果保存在 AX 中MOV BX,W ; W 送到 BX 中SUB BX,AX ; W-(R+9 -(X+6,连续减去两个数,相当于减去这两个数的和 MOV Z,BX ;最终结果送到 Z 中(3MOV AX, W ;把 W 送到 AXIMUL X ; W*X 注意:低十六位保存在 AX 里,高十六位保存

13、在 DX 里MOV BX, Y ;把 Y 送到 BX 里ADD BX, 6 ; Y+6IDIV BX ; (W*X /(Y+6 注意:商保存在 AX 里,余数保存在 DX 里 MOV Z, AX ;把商送到 Z 中,MOV R, DX ;把余数 送到 R 中(4MOV AX,W ;把 W 送到 AX 中SUB AX,X ; W-XCWD ;把 AX 中的十六位带符号数扩展成为 32位,低十六位保存在 AX 中,高十六位保;在 DX 中MOV BX,5 ;把 5送到 BX 中IDIV BX ; (W-X /5 被除数为 32位,除数为 16位 商为 16位 IMUL Y ;上一步结果再乖以 Y

14、,积为 32位MOV BX,2 ;把 2送到 BX 中IMUL BX ;上一步乘法所得的积再乘以 2,各为 64位MOV Z,EAX ;把结果中低 32位放入 Z 双字单元中MOV Z+4,EDX ;把结果中高 32位放入 Z+4双字单元中18。指令 本条指令执行完后 AX 的内容 执行完后 CF,SF,ZF 的值MOV AX,1234H 1234H 0 0 0 MOV CL,4 1234H 0 0 0 ROL AX,CL 2341H 1 0 0 DEC AX 2340H 1 0 0 MOV CX,4 2340H 1 0 0 MUL CX 8D00H 0 0 0 INT 20H程序结束后, (

15、AX =8918H (DX=0000H19。指令 执行完后 AX 的内容 执行完后 CF ,SF,ZF 和 OF 的值MOV AX,0 0 0010DEC AX FFFFH 0100ADD AX,7FFFH 7FFEH 0000ADD AX,2 8000H 0101NOT AX 7FFFH 0101SUB AX,0FFFFH 8000H 1101ADD AX,8000H 0000H 1011SUB AX,1 FFFFH 1101AND AX,58D1H 58D1H 0000SAL AX,1 B1A2H 0101SAR AX,1 D8D1H 0100NEG AX 272FH 1000ROR AX

16、,1 9397H 100120。(1 MOV AX, DA TAXADD DATAY, AX(2 MOV AX, DA TAXADD DATAY, AXMOV AX, DATAX+2ADD DATAY+2 , AX(3本組指令的作用是:BX <-DATAX+DATAY+1(CF的值 帶進位加法 (4 MOV AX, DA TAXMUL DATAY ;結果的高十六位保存在 DX 裏,低十六位保存在 AX 裏 (5 MOV AX, DA TAXMOV DX, DATAX+2MUL DWORD DATAY ; 結果的高三十二位保存在 EDX 裏, 低三十二位保存在 EAX 裏;這裏所用的 DW

17、ORD 為一屬性操作符,在第四章會學到 (6 MOV AX, DA TAXDIV 17H ;結果商保存在 AL 中,余數在 AH 中(7 MOV AX, DA TAXCDWDIV DATAY21。 NEG DXNEG AXSBB DX, 022。MOV AX, A ;把雙字長數的低字放到 AX 中MOV DX, A+2 ;把雙字長數的高字放到 DX 中TEST DX, 8000H ;測試雙字長數的符號JZ RIGHT ;如果是非負數,則直接保存NEG DX ;如果是負數,則求補NEG AXSBB DX, 0RIGHT :MOV B , AXMOV B+2, DX23。每條指令單獨執行完後的結果

18、依次為:(1 9AH (2 61H (3 0FBH (4 1CH (5 0 (6 0E3H24。執行指令序列後, BX 的內容為:0DAH25。(1把 53D 乘以 2的程序:MOV AX, 35H ; 53D=35HSHL AX , 1(2把 53除以 2 的程序:MOV AX, 35HSHR AX, 1其他的同理 26。這段程序完成的功能是:把 DX :AX 中的雙字數據左移 4位(相當於乘以 16D 27。各條指令單獨執行後, DX 的值依次為:(1 5CH (2 17H (3 05C8H (4 72H (5 2017H (6 0CDH (7 0172H (8 05CCH(9 0DCH2

19、8。 該程序段執行完後, BX 寄存器的內容是:C02DH29。 (1从左到右把 CONMAE 中的字符串伟送到 PRLINE 的程序实现:LEA SI, CONAME ;把 CONAME 中第一个字节的偏移地址送到 SI 中LEA DI, PRLINE ;把 PRLINE 中第一个字节 的偏移地址送到 DI 中MOV CX, 20 ;把重复次数放到 CX 里CLD ;让 SI DI从低地址指向高地址 (即从左到右传送 REP MOVSB ;传送(2从右到左把 CONMAE 中的字符串传送到 PRLINE 中的程序实现:LEA SI , CONAMELEA DI, PRLINEMOV CX,

20、20STD ; 和上面唯一不同的就是这次是从右到左, 所以要从高地址批向低地 址REP MOVSB(3把 CONAME 中的第三和第四個字節裝入 AX 的程序實現:LEA SI , CONAME+3LODSW(4把 AX 寄存器的內容存入從 PRLINE+5開始的字節中的程序實現:LEA DI , PRLINE+5STOSW(5檢查 CONAME 字符串中有無空格字符,如有把它偉送給 BH 寄存器的程序實現:LEA DI, CONAME ;把 CONAME 中第一個字符偏移地址放入 DI 中MOV CX, 20 ;把重複次數放到 CX 中MOV AL, 20H ;把空格符的 ASCII 值放入

21、 AL 中CLD ;從低到高REPNE SCASB ;比較MOV BH, DI-1R ;把檢查到的空格符送到 BH 中30。MOV CX, 12H ;把重複次數放到 CX 中。這裏用十六進制表示MOV SI, 0 ;初始化 SIMOV AX, 26H ;把 &字符的 ASCII 值放入 AXCHECK :CMP AX, STRINGSI ;依次查找INC SILOOPNE CHECK ;找到了就退出MOV AX, 20H ;把空格符的 ASCII 值勤放入 AX 中MOV STRINGSI-1, AX ;用空格符代替 &31。 (1用空格符清除 PRINT_LINE域的程序实现

22、:MOV AL, 20HLEA DI , PRINT_LINEMOV CX, 132CLDREP STOSB(2在 STUDENT_ADDR中查找 第一个 _ 的程序实现:MOV AX, 2DH ;把 “” 的 ASCII 值放入 AXMOV SI, 0 ;初始化 SIMOV CX, 9 ;把重複次數放入 CX 中;依次檢查 STUDENT-ADDR 中的字符是否為 "_",找到第一个停下来CHECK :CMP AX , STUDENT_ADDRSI ;INC SILOOPNZ CHECK(3在 STUDENT_ADDR中查找最后一个 ”_“ 的程序实现:;和第二題不同的就

23、是這次是從右到左查詢,所以 SI 的初始化為 9MOV AX, 2DHMOV SI , 9MOV CX, 9CHECK :CMP AX, STUDENT_ADDRSIDEC SILOOPNZ CHECK(4程序實現:MOV AL, 2OH ;把空格符的 ASCII 值放入 AL 中LEA DI , STUDENT_NAME ;把 STUDENT_NAME中第一个字符偏移地址放到 DI 中MOV CX,30 ;把重复次数放到 CX 中CLD ;让 DI 从低位移到高位REPZ SCASB ;如果有不是空格符的,就退出JZ STORE ;如果全是空格符,就转到 STORE 中;用 *代替空格STO

24、RE :MOV AL 2AHMOV CX , 30STD ;注意,这里是把前面从低到高移动的 DI 再从高到低移上去 REP STOSB(5程序实现:;把 STUDENT_NAME 移到 PRINT_LINE的前 30个字节中LEA SI, STUDENT_NAMELEA DI, PRINT_LINEMOV CX , 30CLDREP MOVSB;把 STUDENT_ADDR移到 PRINT_LINE的后 9个字节中LEA SI , STUDENT_ADDR+9LEA DI, PRINT_LINE+132MOV CX,9STDREP MOVSB32。程序实现:。 。 。LEA SI, OLDS

25、LEA DI, NEWSMOV CX, 5REPZ CMPSBJNZ NEW_LESS。 。 。33。(1 CMP DX, CXJA EXCEED(2 CMP BX, AXJG EXCEED(3 CMP CX, 0JZ ZERO(4 CMP BX, AXJO OVERFLOW(5 CMP BX, AXJLE EQ_SMA(6 CMP DX, CXJBE EQ_CX34。 (1跳转到:L1(2跳转到 L1(3跳转到 L2(4跳转到 L5(5跳转到 L535。(1可以引起转移到 L1的指令有:NB , BE , NL , LE(2可以引起转移到 L1的指令有:同上(3可以引起转移到 L1的指令有:

26、B , BE , L , LE(4可以引起转移到 L1的指令有:NB , NBE , NL , NLE(5可以引起转移到 L1的指令有:同上(6可以引起转移 到 L1的指令有:同(3(7可以引起转移 到 L1的指令有:同上36。37。 程序流程图就不画了,呵呵,程序如下 MOV AL, STAUSSI ;把要测试的字节放到 AL 中AND AL, 2AH ;把第一,三,五位为一其他位为 0的数 -2AH ,与这个字节 比较,结果;放到 AL 中JZ ROUTINE_4 ;如果结果为 0,则三位都为 0XOR AL,2AH ; 前面相与的结果再与 2AH 异或JZ ROUTINE_1 ;如果结果

27、为 0,则三位都为 1BSF BL,AL ;BSR BL ,ALCMP BL,CL;如果向前和向后测试后,第一个 1 的位置相同,说明只有一个 1,则异或运算前有 AL 中 有两个 1JE ROUTINE_2ROUTINE_1注:本题还有其他解法,请大家自己试试 38。 (1当括号内是:LOOP 时,循环四次,程序结束后(AX =05 (BX = 16 (CX =0 (DX =0(2 当括号内是:LOOPE 时,不循环,程序结束后(AX =02 (BX =04 (CX =03 (DX =02(3当括号内是:LOOPNE 时:循环三次,程序结束后(AX =04 (BX =11 (CX =01 (

28、DX =039。图,就不画了,呵呵 自己看一下课本, P10140. 。 (1 0000 3100H (2 5100H (3 7100H41。 (1目的地址:2004H 内容依次为:56H F4H 23H 98H(2目的地址:384CH 内容依次为:91H 34H F2H 01H(3目的地址:寄存器,无物理地址 内容依次为:92H 6DH A2H 4CH 42。 (1 PUSH AX(SP<-(SP-2(SP+1<-(AH (SP<-(AL(2POP ESI(ESI<-(ESP+3,(ESP+2,(ESP+1, (ESP(ESP<-(ESP+4(3PUSH BX(

29、SP<-(SP-2(SP+1<-(BX+1 (SP<-(BX(4 PUSHAD(ESP<-(EAX(ESP-4<-(ECX(ESP-8<-(EDX(ESP-12<-(EBX(ESP-16<-(ESP ;这里指的是指令执行前的 ESP(ESP-20<-(EBP(ESP-24<-(ESI(ESP-28<-(EDI(ESP<-(ESP-32(5 POP DS(DS<-(SP+1,(SP(SP<-(SP+2(6 PUSH 4(SP<-(SP-2(SP+1<-0(SP <-443。 (1 2CE FF9

30、3H (2 24B 76A0H(3 909 0804H (4 6F 13ADH44。 (1 0FFFF FFFCH (2 0FFFF FFF8H(3 0000 0007H (4 0000 0099H45。 (EAX =0 (EBX =25d46。 (AX =3d (DX =7d47。 ADD ECX, EDXADD ECX, ESIMOV EDI , ECX48。 IMUL BX, DX , 100H 执行的操作是:(BX <-(DX*100H49。程序实现:MOV AL, BLCBWIDIV CLIMUL 2MOV DX, AX50。JMP DI 是直接跳转,执行的操作是:(IP &l

31、t;-(IP+(DIJMP DI是间接跳转,执行的操作是:(IP <-(IP+(DI跳转到 DI 中所指向的内存单 元中的指令地址 51。假设数组名为 NUMBERS ,程序如下 MOV BX, 0 ;后面用到 MOV CX, 100H ;把循环次数放入 CXMOV AL, 42HMOV SI, 0 ;初始化 SI; CHECK 用来实现查找功能 CHECK :CMP AL , NUMBERSSIINC SIJB STORE1 ;大于 42H 的数的个数存入 UPJA STORE2 ;小于 42H 的的数的个数存入 DOWN 中 LOOP CHECK ;相等继续循环 STORE1 INC

32、 BL ;找到一个大于 42 的数, BL 值增加 1MOV UP, BLLOOP CHECKSTORE2 INC BHMOV DOWN , BHLOOP CHECK第四章1。指令下列指令的错误(1 MOV AH, BX 源操作数与目的操作数长度不相同 (2 MOV BX, SI 这是两个内存单元在传递数据,而这在汇编语言中是不允许的 (3 MOV AX, SIDI 不能用两个变址连用,其中一个应为基址 (4 MOV MYDATBXSI, ES :AX 同(2(5 MOV BYTE PTRBX, 1000 必须有一个为寄存器(6 MOV BX, OFFSET MYDATSI OFFSET 不能

33、与复杂操作数相连 (7 MOV CS, AX 不能对 CS 赋值 (8 MOV ECX, AX 操作数类型不同 2。 (1合法 (2非法 (3非法 (4非法3。 (1非法,操作数类型不同(2合法(3非法,不允许两个内存单元直接传递数据,你把人家 CPU 放哪了? 呵 (4合法 (5合法 (6合法(7 非法 ,必须有一个寄存器 把 CPU 放哪了? (8非法,两个内存单元地址相加没有意义 (9合法(10非法,同(34。 (1两内存单元传递数据(2操作数类型不同(3跳转指令只能跳转到符号地址(4转移指令后不能为变量,只能为标号(5格式不对, 应为 NEAR PTR 。 。 。5。图,就不画了 6。

34、 (1 DW 5150H(2 MOV AX, 5150HMOV ADDRESS , AX等,写出几个就可以 7。 DA TASG SEGMENTFLD1B DB 'personal computer'FLD2B DB 10 DUP (32FLD3B DB 20HFLD4B DB 01011001BFLD5B DB '32654'FLD6B DB 10 DUP (0FLD7B DB 'PART1',DUP 20 (?,'PART2',DUP 50 (?,'PART3',DUP 14 (? FLD1W DW 0FFF0

35、HFLD2W DW 01011001BFLD3W DW FLD7BFLD4W DW 5, 6, 7, 8, 9FLD5W DW 5 DUP (0FLD6W DW (FLD6W-FLD1W -(FLD7B-FLD1B 8。 PLENTH 的值为 22, GE 表示该数据段的长度 9。 L 的值为 710。 (1 MOV AX, OFFSET LNAME(2 MOV SI, WORD PTR CODE_LIST(3 CODE_LENGHT EQU $-CODE_LIST11。代码如下:DA TA_SEG SEGMENTDB 5DA TA_LIST DW 0FFFFH,0,2,5,4, 5 DUP

36、(?DA TA_SEG ENDSCODE_SEG SEGMENTASSUME CS:CODE_SEG,DS:DATA_SEGMOV AX,5MOV MAX,AXMOV AX,0FFFFHMOV MIN,AXCODE_SEG ENDS12。 (1 10025(2 19(3 2548(4 3(5 103(6 0FFFFH(7 1(8 313。分别汇编成为:MOV AX, 0AHMOV BL, 0AHMOV CL, 114。 (1 (AX =1 (2 (AX =2 (3 (CX =14H (4 (DX =32H (5 (CX =115。 (1操作符错误 改为:DATA_SEG SEGMENT(2缺少

37、段名 在前面加个段名(3引用应该从;开始 把那个 “/” 改成 “ ; ”(4结构混乱 改为:MAIN_PROC PROC FAR。 。 。 。MAIN_PROC ENDPEND16。程序框架如下:DA TA_SEG SEGMENT ;定義數據段ORG 0E000H ;讓下一字節地址為 0E000HFIRST_TYPE EQU THIS WORD ; 建立一個與下一存儲單元有相同段地址和偏移地址 的操作數DA TA_GROUP DB 100 DUP(? ;給 DA TA_GROUP 分配 100個字節的空間 DA TA_SEG ENDS ;數據段結束STACK_SEG SEGMENT ;定義堆

38、棧段ALIGN 16 ;讓下一字節從小段首地址開始STACK DB 100 DUP (? ;為堆棧分配空間STACK_SEG ENDS ;CODE_SEG SEGMENTASSUME CS:CODE_SEG ,DS:DATA_SEG ,SS:STACK_SEGORG 1000H ;讓下條指令的第一個字節從 1000H 開始 START : MOV AX,DATA_SEGMOV DS,AXMOV AX,STACK_SEGMOV SS,AX.CODE_SEG ENDSEND START ;結束 17。程序如下:D_SEG SEGMENT ;数据段定义AUGEND DD 99251D_SEG END

39、SE_SEG SEGMENT ;附加段定义ADDEND DD -15926E_SEG ENDSC_SEG SEGMENT ;代码段定义ASSUME CS:C_SEG , DS:D_SEG,ES:E_SEGSTART: MOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXMOV EAX,DS:AUGENDADD EAX,ES:ADDENDMOV DS:SUM,EAXC_SEG ENDSEND START ;结束18。19。需要加上 PTR 伪操作的有:(2 (3 (4第五章5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来.model sm

40、all.stack 100H.codemain proc farStart:push dxmov ax,0push axmov ah,01Hint 21Hcmp al,61Hjl lop1cmp al,7BHjge lop1sub al,20Hmov dl,allop1:mov ah,2int 21HretEnd start5.2 编写一个程序,从键盘接受一个小写字母,然后找出它的前导字符和后续字符,再按顺 序显示这三个字符 .model small .386.codeMAIN PROC FAR start:push dssub ax,axpush axinput:mov ah,7H int

41、21Hcmpe:cmp al,20H JE exitcmp al,61H JL inputcmp al,7AH JG inputprint:sub al,01Hmov dl,almov ah,02H int 21Hadd al,01Hmov dl,almov ah,02H int 21Hadd al,01Hmov dl,almov ah,02H int 21H; 输出换行回车 mov dl,0AH mov ah,02H int 21Hjmp inputexit :retMAIN ENDPEND start5.3 将 AX 寄存器中的 16位数分成 4组,每组 4位,然后把这四组数分别放在 AL

42、 、 BL 、 CL 、 DL 中。.model small.datax DB 4 dup(?.stack 100H.codeMAIN PROC FARstart:push dsand ax,00Hpush axmov ax,1234Hmov cx,04Hmov si,00Hlop:push cxmov cl,04Hrol ax,clpush axand al,0FHmov BYTE PTR xsi,alpop axpop cxadd si,2Loop lopmov al,Xmov bl,X+2mov cl,X+4mov dl,X+6print:mov ah,02Hint 21Hmov dl,

43、almov ah,02Hint 21Hmov dl,blmov ah,02Hint 21Hmov dl,clmov ah,02Hint 21Hexit:retMAIN ENDPEND start5.4 编写一个程序, 要求比较两个字符串 STRING1和 STRING2所含字符是否相同, 若相同 则显示 "MA TCH" ,若不同在显示 :"NO MATCH"。.model small.dataSTRING1 DB 'I must study hard'STRING2 DB 'I must study hard'X DB

44、'MATCH .$'Y DB 'NO MATCH.$'.stack 100H.codemain proc farStart:push dxmov ax,0push axmov ax,datamov ds,axmov es,axlea si,STRING1lea di,STRING2cldmov cx,(string2-string1/ type STRING2retEnd start5.5编写一个程序, 要求能从键盘接收一个个位数 N , 然后响铃 N 次, (响铃的 ASCII 为 07 。 这题比较有意思,呵呵。model small.codemain pr

45、oc farstart:push dssub ax,axpush axinput:mov ah,01Hint 21Hcmp al,20Hje exitcmp al,30Hjle inputcmp al,3AHjge inputsub al,30Hmov cx,axand cx,0FFHlop:mov dl,07Hmov ah,2Hint 21Hloop lopjmp inputexit :retmain endpend start5.6编写程序,将一个包含有 20个数据的数组 M 分成两个数组:正数数组和负数数组 N , 并分别把这两个数组中的数据个数显示出来。.model small.386

46、.dataM DB 1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10P DB 20 dup(?N DB 20 dup(?.codeMAIN PROC FARstart:PUSH dsAND ax,0PUSH axMOV ax,datamov ds,axMOV bx,0MOV si,0MOV di,0MOV cx,20Dcmpe :CMP Mbx,0JL ifLowhight :MOV al,byte ptr MbxMOV byte ptr Psi,alinc siJMP commonContrlifLow :MOV al,byte ptr

47、MbxMOV byte ptr Ndi,alINC dicommonContrl:INC bxloop cmpemov ax,sicall showNumbercall printCRmov ax,dicall showNumberexit: retMAIN ENDP; 注意, ShowNumber 这个子过程有问题,请自行修改 ; showNumber PROC NEARcovernum:DAAMOV dx,axMOV cl,2Hshow:ROL dl,4Hpush dxAND dl,0fHADD dl,30HMOV ah,02Hint 21Hpop dxloop showretshowNu

48、mber ENDP;printCR PROC NEARmov dl,0aHmov ah,02Hmov dl,0dHmov ah,02Hint 21HretprintCR ENDPend start5.7编制一个汇编语言程序,求出首地址为 DATA 的 100D 字数组中的最小偶数,并把它放 在 AX 中。此题根据题意要求应该使用完整汇编格式,因为精简格式也使用 DATA.dataare segmentDA TA DW 3322H,4555H,200H,3544H,1245Hnum DB ($-DATA/2dataare endscode segmentassume cs:code,ds:dat

49、aareMAIN PROC FARstart:push dsmov ax,0Hpush axmov ax,dataaremov ds,axmov dx,0H ; 偶数数量计数mov cx,Word ptr nummov si,0HisO:mov bx,WORD PTR DATAsishr bx,1Hjnc addDXjmp commonControladdDX:ADD dx,1Hcmp dx,1Hje firstAXValuecompare:mov bx,WORD PTR DATAsicmp bx,axjge commonControlmov ax,bxcommonControl:ADD si

50、,2Hloop isOfirstAXvalue:mov ax,WORD PTR DATAsijmp compareexit:retMAIN ENDPcode endsEND start5.8没有做。 。5.9编写一个汇编语言程序,要求从键盘上接收一个思维的十六位进制数,并在终端上显示 与它等值的二进制数。.model small.386.codemain proc farstart:push dsmov ax,0push axmov ax,0mov cx,4mov dx,0input:mov ah,1Hint 21Hcmp al,30Hjl inputcmp al,39Hjle scmp al

51、,61Hjl inputcmp al,66Hjg inputsub al,27Hs:sub al,30Hadd dl,alcmp cx,1Hje frol dx,4f:loop inputexit:call printretmain endpprint proc nearmov cx,10Hp:rol dx,1push dxand dx,1add dx,30Hmov ah,2int 21Hpop dxloop pretprint endpend start5.10设有一段英文, 其变量字符名为 ENG , 并以 $字符结束。 试编写一程序, 查对单词 SUN 在该文中的出现次数,并以格式 &q

52、uot;SUN XXXX"显示出次数。.model small.386.dataENG db 'SUN's SUN JAV A',24H ;24H = $MESSAGE db 'SUN:','$'.stack 100H.codeMAIN PROC FARstart:PUSH DSAND AX,0PUSH AXMOV AX,dataMOV DS,AX;-MOV AX,0HMOV SI,1HsubSI1:SUB SI,1HsubSI2:SUB SI,1HcompareS:ADD SI,1HMOV DL,ENGSICMP DL,24HJE printCMP DL,53HJNE compareScompareU:ADD SI,1HMOV DL,ENGSICMP DL,55HJNE subSI2compareN:ADD SI,1HMOV DL,ENGSICMP DL,4EHJNE subSI1INC AXJ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论