汇编语言程序设计(第二版)课后习题答案.pdf

上传人:赵** 文档编号:69174235 上传时间:2022-12-31 格式:PDF 页数:28 大小:672.27KB
返回 下载 相关 举报
汇编语言程序设计(第二版)课后习题答案.pdf_第1页
第1页 / 共28页
汇编语言程序设计(第二版)课后习题答案.pdf_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《汇编语言程序设计(第二版)课后习题答案.pdf》由会员分享,可在线阅读,更多相关《汇编语言程序设计(第二版)课后习题答案.pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!汇编语言程序设计(第二版)课后习题答案第二章1.解答:有 256 个2.解答:如下图.第一个络子为 000B0H 字单元,注意,是字单元,第五个格子为 000B3H 字单元E51E3C2A3.解答:30022H 字节单元内容:ABH30024H 字节单元内容:EFH30021H 字单元内容:AB34H30022H 字单元内容:CDABH4.解答:这三个物理地址都是 3017AH,说明了不同的段地址和偏移地址对应同一物理地址5.解答:CS+IP 第一个字的物理地址为:0AAA40H6.解答:条件标志 O

2、F,SF,ZF,CF,的值依次为:0,0,0,07.下列操作可使用那些寄存器?(1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如 AH,AL 等(2)循环计数CX(3)乘法和除法DX,AX,AH,AL(4)保存段地址CS,DS,ES,SS(5)表示运算结果为 OFLAGS(6)将要执行的指令地址 IP(7)将要从堆栈取出数据的地址BP,SP,SS8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP9.一一对应;5-A4-B2-C3-D 12-E 9-F11-G10-H 13-I 8-J7-K6-L1-M15-N 14-O

3、第三章1.(1)立即寻址没有(2)直接寻址7237H(3)使用 BX 的寄存器寻址没有(4)使用 BX 的间接寻址637DH(5)使用 BX 的寄存器相对寻址0D5B4H(6)基址变址寻址8E18H(7)相对基址变址004FH2.根据下列要求,写出相应的汇编指令。(1)ADDDX,BX(2)ADD AL,BXSI(3)ADD BX0B2H,CX(4)MOVAX,2A59HADD 0524H,AX(5)ADD AL,0B5H3.(1)寄存器间接寻址欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV BX,OFFSET BLOCK0AHMOVDX,

4、BX(2)寄存器相对寻址MOVSI,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,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX 寄存器的内容。(1)MOVAX,1200H1200H(2)MOVAX,BX0100H(3)MOVAX,12004C2AH注意,是字单元!(4)MO

5、VAX,BX3412H同上(5)MOV1100BX4C2AH(6)MOVAX,BXSI7856H(7)MOVAX,1100BXSI65B7H5.(1)7CD9H(2)0600H(3)098AH6.MOVBX,2000HLESDI,BXMOVAX,ES:DI7.转向地址 OBJ 的值分别为:(1)064DH(2)0691H(3)05E0H注意有符号数的符号位8.(1)MOVAX,0ABH立即数寻址无物理地址(2)MOVAX,BX寄存器寻址同上(3)MOVAX,100直接寻址20100H(4)MOV AX,VAL直接寻址20050H(5)MOV AX,BX寄存器间接寻址20100H(6)MOVAX

6、,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相对基相变址寻址201F0H9.(1)的指令:MOV AX,BX0CHMOVZREO,AX(2)的指令:MOVAX,ARRAYBXMOV ZREO,AX欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!10.MOV AX,TABLE是把符号

7、地址 TABLE 里的内容送到 AX 里,指令执行完后,(AX)=1234HLEA AX,TABLE是把符号地址 TABLE 的有效地址(这里是偏移量)送到指定寄存器 AX 里,指令执行完后,(AX)=0032H11.执行完指令后,(AX)=1E00H12.LEA AX,CSTRINGMOV DL,AXMOV DH,AX+613.课本上 P51-P5314.LES BX,2000MOV AX,ES:BX一条指令的话为 MOV AX,ES:8000H15.运算结果SF,ZF,CF,OF 各位的值(从左至右依次往下)(1)74D4H0000(2)A5C1H1001(3)4240H0010(4)00

8、00H011016.接上表(1)5D140000(2)A8701001(3)D8701000(4)34E4001017.(1)MOV AX,Z;把 Z 送到 AXSUB AX,X;Z-XADD AX,W;W+(Z-X)MOV 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 中SUBBX,AX;W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和MOV Z,BX;最终结果送到 Z

9、中(3)MOV AX,W;把 W 送到 AXIMUL X;W*X注意:低十六位保存在 AX 里,高十六位保存在 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 中欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(4)MOV AX,W;把 W 送到 AX 中SUB AX,X;W-XCWD;把 AX 中的十六位带符号数扩展成为 32 位,低十六位保存在 AX 中,高十六位保存

10、在 DX 中MOV BX,5;把 5 送到 BX 中IDIV BX;(W-X)/5被除数为 32 位,除数为 16 位商为 16位IMUL Y;上一步结果再乖以 Y,积为 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 的值MOVAX,1234H1234H000MOVCL,41234H000ROLAX,CL2341H100DECAX2340H

11、100MOVCX,42340H100MULCX8918H000INT 20H程序结束后,(AX)=8918H(DX)=0000H19.指令执行完后 AX 的内容执行完后 CF,SF,ZF 和OF 的值MOVAX,000010DECAXFFFFH0100欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!ADD7FFEH0000ADDAX,28000H0101NOTAX7FFFH0101SUBAX,0FFFFH8000H1101ADD AX,8000H0000H1011SUBAX,1FFFFH1101AND AX,58D1H58D1H0000SAL AX

12、,1B1A2H0101SAR AX,1D8D1H0100NEG AX272FH1000ROR AX,19397H100120.(1)MOV AX,DATAXADD DATAY,AX(2)MOV AX,DATAXADD DATAY,AXMOVAX,DATAX+2ADD DATAY+2,AX(3)本組指令的作用是:BX-DATAX+DATAY+1(CF 的值)帶進位加法(4)MOVAX,DATAXMULDATAY;結果的高十六位保存在 DX 裏,低十六位保存在 AX裏(5)MOV AX,DATAXMOV DX,DATAX+2MULDWORD DATAY;結果的高三十二位保存在 EDX 裏,低三十二

13、位保存在 EAX 裏(6)MOV AX,DATAXDIV17H;結果商保存在 AL 中,余數在 AH 中(7)MOV AX,DATAXCDWDIVDATAY21.NEG DXNEG AXSBB DX,022.MOV AX,A;把雙字長數的低字放到 AX 中MOV DX,A+2;把雙字長數的高字放到 DX 中TEST DX,8000H;測試雙字長數的符號欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!JZRIGHT;如果是非負數,則直接保存NEG DX;如果是負數,則求補NEG AXSBB DX,0RIGHT:MOV B,AXMOV B+2,DX23

14、.每條指令單獨執行完後的結果依次為:(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,126.這段程序完成的功能是:把 DX:AX 中的雙字數據左移 4 位(相當於乘以 16D)27.各條指令單獨執行後,DX 的值依次為:(1)5CH(2)17H(3)05C8H(4)72H(5)2017H(6)0CDH(7)0172H(8)05CCH(9)0DCH28.該程序段執行完

15、後,BX 寄存器的內容是:C02DH29.(1)从左到右把 CONMAE 中的字符串伟送到 PRLINE 的程序实现:LEA SI,CONAME;把 CONAME 中第一个字节的偏移地址送到 SI 中LEA DI,PRLINE;把 PRLINE 中第一个字节 的偏移地址送到 DI 中MOV CX,20;把重复次数放到 CX 里CLD;让 SI DI 从低地址指向高地址(即从左到右传送)REPMOVSB;传送(2)从右到左把 CONMAE 中的字符串传送到 PRLINE 中的程序实现:LEA SI,CONAMELEA DI,PRLINEMOV CX,20STD;和上面唯一不同的就是这次是从右到左

16、,所以要从高地址批向低地址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 值放入 AL 中CLD;從低到高欢迎您阅读并下载本文档,本文档来源于互联

17、网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!REPNESCASB;比較MOV BH,DI-1R;把檢查到的空格符送到 BH 中30.MOV CX,12H;把重複次數放到 CX 中。這裏用十六進制表示MOV SI,0;初始化 SIMOV AX,26H;把&字符的 ASCII 值放入 AXCHECK:CMP AX,STRINGSI;依次查找INC SILOOPNECHECK;找到了就退出MOV AX,20H;把空格符的 ASCII 值勤放入 AX 中MOV STRINGSI-1,AX;用空格符代替&31.(1)用空格符清除 PRINT_LINE 域的程序实现:MOV AL,20HLEA

18、DI,PRINT_LINEMOVCX,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 中查找最后一个“_”的程序实现:;和第二題不同的就是這次是從右到左查詢,所以 SI 的初始化為 9MOV AX,2DHMOV SI,

19、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;如果有不是空格符的,就退出JZSTORE;如果全是空格符,就转到 STORE 中;用*代替空格STORE:MOV AL 2AHMOV CX,30欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们

20、将竭诚为您提供优质的文档!STD;注意,这里是把前面从低到高移动的 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.程序实现:LEASI,OLDSLEA DI,NEWSMOV CX,5REP

21、ZCMPSBJNZNEW_LESS33.(1)CMPDX,CXJAEXCEED(2)CMP BX,AXJGEXCEED(3)CMP CX,0JZZERO(4)CMP BX,AXJOOVERFLOW(5)CMP BX,AXJLEEQ_SMA(6)CMP DX,CXJBEEQ_CX34.(1)跳转到:L1(2)跳转到 L1(3)跳转到 L2(4)跳转到 L5(5)跳转到 L535.(1)可以引起转移到 L1 的指令有:NB,BE,NL,LE欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(2)可以引起转移到 L1 的指令有:同上(3)可以引起转移到 L

22、1 的指令有:B,BE,L,LE(4)可以引起转移到 L1 的指令有:NB,NBE,NL,NLE(5)可以引起转移到 L1 的指令有:同上(6)可以引起转移 到 L1 的指令有:同(3)(7)可以引起转移 到 L1 的指令有:同上37.MOV AL,STAUSSI;把要测试的字节放到 AL 中AND AL,2AH;把第一,三,五位为一其他位为 0 的数-2AH,与这个字节比较,结果放到 AL 中JZ ROUTINE_4;如果结果为 0,则三位都为 0XOR AL,2AH;前面相与的结果再与 2AH 异或JZ ROUTINE_1;如果结果为 0,则三位都为 1BSF BL,AL;BSR BL,A

23、LCMP BL,CL;如果向前和向后测试后,第一个 1 的位置相同,说明只有一个 1,则异或运算前有 AL 中有两个 1JE ROUTINE_2ROUTINE_138.(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(DX)=039.P10140.(1)0000 3100H(2)5100H(3)7100H41.(1)目的地址:2004H

24、内容依次为:56HF4H23H98H(2)目的地址:384CH内容依次为:91H34HF2H01H(3)目的地址:寄存器,无物理地址内容依次为:92H6DHA2H4CH42.(1)PUSH AX(SP)-(SP)-2(SP+1)-(AH)(SP)-(AL)(2)POP ESI(ESI)-(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)-(ESP)+4(3)PUSH BX(SP)-(SP)-2(SP+1)-(BX+1)(SP)-(BX)(4)PUSHAD(ESP)-(EAX)(ESP-4)-(ECX)欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为

25、您提供优质的文档!(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)-0SP)-443.(1)2CE FF93H(2)24B76A0H(3)909 0804H(4)6F 13ADH44.(1)0FFFF FFFCH(2)0FFFF FFF8H(3)00000007H(4)00000099H45.(E

26、AX)=0(EBX)=25d46.(AX)=3d(DX)=7d47.ADD ECX,EDXADD ECX,ESIMOVEDI,ECX48.IMUL BX,DX,100H 执行的操作是:(BX)-(DX)*100H49.程序实现:MOV AL,BLCBWIDIVCLIMUL 2MOV DX,AX50.JMP DI 是直接跳转,执行的操作是:(IP)-(IP)+(DI)JMP DI是间接跳转,执行的操作是:(IP)-(IP)+(DI)跳转到 DI 中所指向的内存单元中的指令地址51.假设数组名为 NUMBERS,程序如下MOV BX,0;后面用到MOV CX,100H;把循环次数放入 CXMOV

27、AL,42HMOV SI,0;初始化 SI;CHECK 用来实现查找功能CHECK:CMP AL,NUMBERSSIINC SI欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!JBSTORE1;大于 42H 的数的个数存入 UPJASTORE2;小于 42H 的的数的个数存入 DOWN 中LOOP CHECK;相等继续循环STORE1INCBL;找到一个大于 42 的数,BL 值增加 1MOV UP,BLLOOP CHECKSTORE2INC BHMOV DOWN,BHLOOP CHECK第四章1.指令下列指令的错误(1)MOV AH,BX源操作数

28、与目的操作数长度不相同(2)MOV BX,SI这是两个内存单元在传递数据,而这在汇编语言中是不允许的(3)MOV AX,SIDI不能用两个变址连用,其中一个应为基址(4)MOV MYDATBXSI,ES:AX同(2)(5)MOV BYTE PTRBX,1000必须有一个为寄存器(6)MOV BX,OFFSET MYDATSIOFFSET 不能与复杂操作数相连(7)MOV CS,AX不能对 CS 赋值(8)MOV ECX,AX操作数类型不同2.(1)合法(2)非法(3)非法(4)非法3.(1)非法,操作数类型不同(2)合法(3)非法,不允许两个内存单元直接传递数据(4)合法(5)合法(6)合法(

29、7)非法,必须有一个寄存器(8)非法,两个内存单元地址相加没有意义(9)合法(10)非法,同(3)4.(1)两内存单元传递数据(2)操作数类型不同(3)跳转指令只能跳转到符号地址(4)转移指令后不能为变量,只能为标号(5)格式不对,应为NEAR PTR6.(1)DW5150H(2)MOV AX,5150HMOVADDRESS,AX7.DATASGSEGMENTFLD1BDBpersonal computerFLD2BDB10 DUP(32)FLD3BDB20H欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!FLD4BDB01011001BFLD5B

30、DB32654FLD6BDB10 DUP(0)FLD7BDBPART1,DUP 20(?),PART2,DUP 50(?),PART3,DUP 14(?)FLD1WDW0FFF0HFLD2WDW01011001BFLD3WDWFLD7BFLD4WDW5,6,7,8,9FLD5WDW5 DUP(0)FLD6WDW(FLD6W-FLD1W)-(FLD7B-FLD1B)8.PLENTH 的值为 22,GE 表示该数据段的长度9.L 的值为 710.(1)MOV AX,OFFSETLNAME(2)MOV SI,WORD PTR CODE_LIST(3)CODE_LENGHTEQU$-CODE_LIST

31、11.代码如下:DATA_SEGSEGMENTDB5DATA_LISTDW0FFFFH,0,2,5,4,5 DUP(?)DATA_SEGENDSCODE_SEGSEGMENTASSUMECS:CODE_SEG,DS:DATA_SEGMOV AX,5MOV MAX,AXMOV AX,0FFFFHMOV MIN,AXCODE_SEGENDS12.(1)10025(2)19(3)2548(4)3(5)103(6)0FFFFH(7)1(8)313.分别汇编成为:MOV AX,0AHMOV BL,0AHMOVCL,114.(1)(AX)=1(2)(AX)=2(3)(CX)=14H(4)(DX)=32H(

32、5)(CX)=115.(1)操作符错误改为:DATA_SEGSEGMENT(2)缺少段名在前面加个段名(3)引用应该从;开始把那个“/”改成“;”(4)结构混乱改为:MAIN_PROC PROC FARMAIN_PROCENDPEND16.程序框架如下:DATA_SEGSEGMENT;定義數據段ORG 0E000H;讓下一字節地址為 0E000H欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!FIRST_TYPEEQU THIS WORD;建立一個與下一存儲單元有相同段地址和偏移地址的操作數DATA_GROUP DB 100 DUP(?);給 DA

33、TA_GROUP 分配 100 個字節的空間DATA_SEGENDS;數據段結束STACK_SEGSEGMENT;定義堆棧段ALIGN 16;讓下一字節從小段首地址開始STACK DB 100 DUP(?);為堆棧分配空間STACK_SEGENDS;CODE_SEG SEGMENTASSUMECS:CODE_SEG,DS:DATA_SEG,SS:STACK_SEGORG 1000H;讓下條指令的第一個字節從 1000H 開始START:MOV AX,DATA_SEGMOV DS,AXMOV AX,STACK_SEGMOV SS,AX.CODE_SEGENDSEND START;結束17。程序如

34、下:D_SEGSEGMENT;数据段定义AUGENDDD99251D_SEGENDSE_SEGSEGMENT;附加段定义ADDENDDD-15926E_SEGENDSC_SEGSEGMENT;代码段定义ASSUMECS:C_SEG,DS:D_SEG,ES:E_SEGSTART:MOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXMOV EAX,DS:AUGENDADD EAX,ES:ADDENDMOVDS:SUM,EAXC_SEGENDSENDSTART;结束19.需要加上 PTR 伪操作的有:(2)(3)(4)第五章1.程序實現:(經 DEBUG 調試通過)欢

35、迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!codesegmentmain proc farassume cs:codestart:mov ah,1hint 21hsub al,20hmov ah,2mov dl,alint 21hmain endpcode endsendstart2.程序實現:(經 DEBUG 調試通過)code segmentassume cs:codemov ah,1hint 21hsub al,1hmov cl,3again:mov dl,almov ah,2int 21hinc alloop againcode end

36、send3.程序實現:(經 DEBUG 調試通過)code segmentassume cs:codemovax,0f0fehmovcl,4;把 AX 的最高四位rolax,cl;移到最右面andal,0fh;再把 AL 的高四位清 0movdl,alrol ax,cland al,0fhmov cl,al欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!rol ax,cland al,0fhmov bl,alrol ax,cland al,0fhcode endsend4.程序實現:(經 DEBUG 調試通過)data segmentstring1

37、 db 20,0,20 dup(?)string2 db 20,0,20 dup(?)string3 db please inputstring1!,$string5 db match!,$string6 db nomatch!,$data endscode segmentMAIN PROC FARassume cs:code,ds:datastart:pushax;保護現場push bxpush cxpush dxmov ax,datamov ds,axmov dx,offset string3callinfo;在屏幕上輸出提示信息mov dx,offset string1callinput

38、;在第一緩衝區輸入字符串mov dx,offset string4callinfo;在屏幕上輸出提示信息mov dx,offset string2callinput;在第二緩衝區輸入字符串callcheck;比較兩個字符串popdx;寄存器出棧欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!pop cxpop bxpop axmain endp;輸入字符串到緩衝區的過程INPUT PROC NEARpush axmov ah,0AHint 21hpop axretINPUT ENDP;在屏幕上輸出提示信息的過程INFO PROC NEARpush

39、axmov ah,9int 21hcallcrlf;回車換行pop axretINFO ENDP;回車換行 的過程CRLF PROC NEARpush dxpush axmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hpop axpop dxretCRLF ENDP;比較兩字符串是否相同並且在屏幕上輸出相應信息的過程CHECK PROC NEARpush axpush cxpush sipush dimov ax,0mov cx,0欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!mov cl,st

40、ring1+1mov si,2mov di,2re:mov al,string1dicmp al,string2sijnz noinc diinc sidec cxjnz remov dx,offset string5call infojmp exitno:mov dx,offset string6call infoexit:pop dipop sipop cxpop axretCHECK ENDPcode endsend start5.程序實現:(經 DEBUG 調試通過)data segmentinfo1 db PLEASE INPUT A NUMBER,$;提示信息,下同info2 db

41、 WRONG NUMBER!PLEASE INPUT ANOTHER NUMBER!,$;如果鍵入非數字值,報錯,並提示輸入新的數字dataendscode segmentMAIN PROC FARassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset info1call info;提示輸入一個數字欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!call input;輸入過程call check;檢查是否非數字字符call bell;響鈴 N 次,N 為鍵入數字retMAIN EN

42、DP;在屏幕上輸出提示信息的過程INFO PROC NEARpush axmov ah,9hint 21hcall crlfpop axretINFO ENDP;回車換行的過程CRLF PROC NEARpush axpush dxmov dl,0dhmov ah,2hint 21hmov dl,0ahmov ah,2hint 21hpop dxpop axretCRLF ENDP;輸入的過程INPUT PROC NEARmov ah,1int 21hretINPUT ENDP;檢查是否非數字字符的過程CHECK PROC NEARpush dxcmp al,30h;如果鍵入的字符 ASCII

43、 值小於 0 的 ASCII 值30H,jb WRONG;剛轉入 WRONG,作錯誤處理cmp al,39h;如果鍵入的字符ASCII值大於9的ASCII值39H,欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!ja WRONG;則轉入 WRONG,作錯誤處理mov cl,al;把合法的數字 ASCII 值放入 CL 中jmp next;錯誤處理過程,提示,並等待用戶鍵入新值WRONG:mov dx,offset info2call infocall inputcall checknext:pop dxretCHECK ENDP;根據用戶鍵入的數字

44、,響鈴相應的次數BELL PROC NEARpush dxsub cl,30h;鍵入數字的 ASCII 值減去 30,才能成為次數mov dl,7hmov ah,2re:int 21hdec cxjnz repop dxretBELL ENDPCODE ENDSEND START6.程序實現。(末经调试).model small.datamdbdup(20 個數)ndb 20,0,20 dup(?);用于存放负数的最大容量为 20 的数组pdb20,0,20 dup(?);同上,用于存放正数.codemain proc farstart:mov ax,datamov ds,axcallchec

45、k_store;判斷數的正負並存入相應數組calldisplay;在屏幕上顯示main endp欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!check_storeproc nearpush axpush bxpush cxmov cx,20;循環次數放入 CXcld;使 SI向增加的方向移動lea si,m;M 的偏移地址放入 SIagain:mov al,si;M 中的數依次放入 AL 中cmp al,0;並且依次和0 比較jlstore_in_n;如果小於 0,則存入負數組jgstore_in_p;如果大於 0,剛存入正數組dec cxjn

46、zagainjz exitstore_in_n:push bxmov bl,n1;N 中已有數的個數放入 BL 中,mov nbl+1,al;把 AL 中負數存入數組 N 的最後一個數字的下一字節popbxjmpagainstore_in_pSTOREINPpush bxmov bl,p1mov pbl+1,alpop bxjmp againexit:pop cxpop bxpop axretcheck_storeendpdisplayproc nearpush cx欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!lea si,n2mov cl,n

47、1;數組 N 中數的個數放入 CLcldmov ah 2re_display_n:;依次顯示各個負數mov dl,siint 21hmov dl,20h;各個數之間用空格間隔int 21hdec cljnzre_display_n;下面四行用來回車和換行mov dl,0dhint21hmov dl,0ahint 21h;同上面負數的顯示,lea si,p2mov ch,p1cldre_display_p:mov dl,siint 21hmovdl,20hint 21hdec chjnzre_display_ppop cxretdisplayendpend start7.程序實現。(未調試).m

48、odelsmall.datadatadb100d dup(100 個數).codestart:mov ax,datamov ds,axmov cx,101d;循環次數mov bl,0feh;初始化BX為最大的八位無符號正數欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!movsi,offsetdatacldagain:dec cxjzfinish;全部判斷完成mov al,sicbwdiv2;每個數除以2cmp al,0;佘數不為 0 的,不是偶數jneagaincmp bl,si;每次比較,jlagain;較小的數,mov bl,si;代替 BX

49、 中原來的數jmp againfinish:mov ax,0mov al,bl;把最小偶數放到 AX中end start8.程序實現。(未調試).modelsamll.codestart:mov ch,9;比較次數放入 CHmov cl,2;每次 AX 循左移的次數放入 CLmov dl,0;初始化 DL,DL,中存放“四分之一字節”為三的個數again:dec ch;如果 AX 最後兩個字節循環結束,jz display;則在屏幕上輸出為“3”的個數rolax,clmov bl,alandbl,3cmp bl,3;如果“四分之一字節”不為 3,jnz again;則判斷下一個“四分之一字節”

50、inc dl;否則,DL 增加一jmpagaindisplay:;在屏幕上輸出 DL 內容mov ah,2int 21hend start9.程序實現:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.model small.datainfo1 db PLEASE INPUT A NUMBER!,0DH,0AH,$;提示信息,下同info2 db ILLEGAL CHAR,PLEASE TYPE IT AGAIN!,0DH,0AH,$.codemain proc farstart:PUSH axpush bxpush cxpush dxmov ax

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁