汇编课后习题答案.pdf

上传人:无*** 文档编号:90867301 上传时间:2023-05-18 格式:PDF 页数:25 大小:2.95MB
返回 下载 相关 举报
汇编课后习题答案.pdf_第1页
第1页 / 共25页
汇编课后习题答案.pdf_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《汇编课后习题答案.pdf》由会员分享,可在线阅读,更多相关《汇编课后习题答案.pdf(25页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、I B M-P C汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美明,温冬蝉著)第二章1 .解答:有 2 5 6 个2 .解答:如下图.第 个络子为O O O B O H字单元,注意,是字单元,第五个格子为O O O B 3 H字单元E51 E3 c2 A3 .解答:3 002 2 H字节单元内容:A B H 3 002 4 H字节单元内容:EFH3 002 1 H字单元内容:A B 3 4 H 3 002 2 H字单元内容:C D A B H4 .解答:这三个物理地址都是3 01 7 A H,说明了不同的段地址和偏移地址对应同一物理地址5 .解答:CS+I P 第一个字的物理地

2、址为:O A A A 4 0H6 .解答:条件标志O F,S F,Z F,CF,的值依次为:0,0,0,07 .下列操作可使用那些寄存器?(1)加法和减法 A X,B X,CX,DX,当然,还有这几个通用寄存器的高低位了,如 A H,A L 等(2)循环计数 CX(3)乘 法 和 除 法 DX,A X,A H,A L(4)保 存 段 地 址 CS ,DS,ES,S S(5)表示运算结果为O FLA GS(6)将要执行的指令地址I P(7)将要从堆栈取出数据的地址B P,S P,S S8.可以用来指示存储器地址的寄存器有:B X,S P,B P,DI,CS,DS,S I,ES,S S,I P9.

3、-对应;5-A 4-B 2-C 3-D 1 2-E 9-F 1 1-G 1 0-H 1 3-1 8-J 7-K 6 L 1-M 1 5-N 1 4-0第三章1 .(1)立即寻址 没有(2)直接寻址 7 2 3 7 H(3)使用BX的寄存器寻址 没有(4)使用BX的间接寻址 6 3 7 DH(5)使用BX的寄存器相对寻址 0D5 B 4 H(6)基址变址寻址 8E1 8H(7)相对基址变址 004 FH2 .根据下列要求,写出相应的汇编指令。(1)A D D DX,B X(2)A D D A L,B X J I S I J(3)A D D B X 0B 2 H,CX(4)M O V A X,2

4、A 5 9H A D D 05 2 4 HJ ,A X(5)A DDA L,0B 5 H3.(1)寄存器间接寻址MOV BX,OFFSET BLOCKOAHMOV DX,BX(2)寄存器相对寻址MOV SLOAHMOV DX,|BLOCKSI 基址变址寻址MOV BX,BLOCKMOV SI,OAHMOV DX,BXSI4.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(2010 l)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列

5、各条指令执行完后,AX 寄存器的内容。(1)MOV AXJ200H(2)MOV AX,BX(3)MOV AX,1200(4)MOV AXJBX(5)MOV 1100BX(6)MOV AX,BX1SI1200H01 OOH4C2AH 注意,是字单元!3412H 同上4C2AH7856H MOV AX,1100BXSI 65B7H5.(1)7CD9H(2)0600H6.MOV BX,2000HLES DI,BXMOV AX,ES:DI7.转向地址OBJ的值分别为:(3)098AH(1)064DH 0691H(3)05E0H 注意有符号数的符号位8.(1)MOV AX,0ABH(2)MOV AX,B

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

7、H MOV ZREO,AX(2)的指令:MOV AX,ARRAYBX MOV ZREO,AX10.MOV AX,TABLE 是把符号地址TABLE里的内容送到A X 里,指令执行完后,(AX)=1234HLEA AX,TABLE 是把符号地址TABLE的有效地址(这里是偏移量)送到指定寄存器AX里,指令执行完后,(AX)=0032H1L执行完指令后,(AX)=1EOOH12.LEAAX,CSTRINGMOV DL,AXMOV DHJAX+613.课本上 P51-P5314.LES BX,2000MOV AX,ES:BX一条指令的话为MOVAX,ES:8000H15.运算结果SF,ZF,CF,O

8、F各位的值(从左至右依次往下)(1)74D4H0 0 0 0 A5C1H1 0 0 1(3)4240H 01 0 1 0(4)0000H16.接上表0 110(1)5D14 00 0 0(2)A870 10 0 1(3)D870 10 0 0(4)34E4 00 1 017.(l)MOV AX,Z;把 Z 送到AXSUB AX,X;z-xADD AX,W;W+(Z-X)MOV Z,AX;结果保存在z 中(2)MOVAX,R;R 送到A X 中ADD AX,9;I、+9MOV BX,X;X 送到B X 中ADD BX,6;X+6ADD AX,BX;(R+9)+(X+6),结果保存在A X 中MO

9、V BX,W;W 送到BX 中SUB BX,AX;W-(R+9)(X+6卜连续减去两个数MOV Z,BX;最终结果送到Z 中,相当于减去这两个数的和(3)MOV AX,IMULXMOV BX,ADD BX,IDIV BXWY6MOVZ,MOVR,(4)AXDX;把 W 送到AXW*X 注意:低十六位保存在A X 里,高十六位保存在DX里;把 Y 送到B X 里;Y+6(W*X)/(Y+6)注意:商保存在AX里,余数保存在DX里;把商送到Z 中,;把 余 数 送 到 R 中MOV AX,W;把 W 送到A X 中SUB AX,X;W-XCWD:把 A X 中的十六位带符号数扩展成为32位,低十六

10、位保存在A X 中,高十六位保存在D X 中MOV BX,5;把 5 送到B X 中IDIV BX;(W-X)/5 被除数为32位,除数为16位 商 为 16位IMULY;上一步结果再乖以Y,积为32位MOV BX,2;把 2 送 到 BX中IMULBX;上一步乘法所得的积再乘以2,各为64位MOV Z,EAX;把结果中低32位放入Z 双字单元中MOV Z+4,EDX;把结果中高32位放入Z+4双字单元中18.指令 本条指令执行完后A X 的内容 执行完后CESFZF的值MOVAXJ234H1234H0 0 0MOV CL,41234H0 0 0ROLAX,CL2341H1 0 0DEC AX

11、2340H1 0 0MOV CX,42340H1 0 0MULCX8918H0 0 0INT 20H程序结束后,(AX)=89I8H(DX)=0000H19.指令执行完后AX的内容 执行完后CF,SF,ZF和 O F的值MOV AX,000010DEC AXFFFFH0100ADD7FFEH0000ADD AX,28000H0101NOTAX7FFFH0101SUB AXQFFFFH 8000H1101ADD AX,8000H0000H1011SUB AX,1FFFFH1101ANDAX,58D1H58D1H0000SAL AX,1B1A2H0101SARAX,1D8D1H0100NEG AX

12、272FH1000ROR AX,19397H100120.(1)MOV AX,DATAXADD DATAY,AX(2)MOV AX,DATAXADD DATAY,AXMOV AX,DATAX+2ADD DATAY+2,AX(3)本幺目指令的作用是:BXDATAX+DArAY+l(CF的值)带暹位加法(4)MOV AX,DATAXMUL DATAY;结果的高十六位保存在DX裹,低十六位保存在AX裹(5)MOVAX,DATAXMOV DX,DATAX+2JMUL DWORD DATAY;咨吉果的高三十二位保存在EDX凄,低三十二位保存在EAX裹(6)MOV AX,DATAXDIV 17H;结果商保

13、存在A L中,余数在A H 中(7)MOV AX,DATAXCDWDIV DATAY21.NEG DXNEG AXSBB DX,022.MOVAX,AMOV DX,A+2TEST DX,8000HJZ RIGHTNEG DXNEG AXSBB DX,0;把曼字房数的低字放到A X 中;把曼字房数的高字放到DX 中;测就曼字房数的符虢;如果是非:f t 数,IW直接保存;如果是负数,即求衲RIGHT:MOVB,AXMOV B+2,DX23.每脩指令 轨行完彼的结果依次卷:(1)9AH(2)61H(3)0FBH(4)1CH(5)0(6)0E3H24融行指令序列彳爰,BX 的内容卷:0DAH25.(

14、1)把 53D乘以2 的程序:MOVAX,35HSHLAX,1;53D=35H(2)把 53除以2 的程序:MOV AX,35HSHR AX,126.道段程序完成的功能是:把 DX:A X 中的曼字数撼左移4 位(相常於乘以16D)27.各脩指令 轨行彳爰,D X 的值依次卷:(1)5CH(2)17H(3)05C8H(4)72H(5)2017H(6)0CDH(7)0172H(8)05CCH(9)0DCH28.程序段孰行完彳爰,BX寄存器的内容是:C02DH29.(1)从左到右把CONMAE中的字符串伟送到PRLINE的程序实现:LEASI,CONAME;把 CONAME中第一个字节的偏移地址送

15、到S I中LEA DL PRLINE;把 PRLINE中第一个字节 的偏移地址送到D I中MOV CX,20;把重复次数放到CX里CLD;让 SI D I从低地址指向高地址(即从左到右传送)REP MOVSB;传送从右到左把CONMAE中的字符串传送到PRUNE中的程序实现:LEASI,CONAMELEA DI,PRLINEMOV CX,20STD;和上面唯一不同的就是这次是从右到左,所以要从高地址批向低地址REP MOVSB(3)把 CONAME中的第三和第四假1 字第装入AX的程序LEASI,CONAME+3LODSW(4)把 A X 寄存器的内容存入彳耸PRLINE+5 始的字U 中的程

16、序LEA DI,PRLINE+5JSTOSW(5)榆!查CONAME字符串中有辗空格字符,如有把它俾送给BH寄存器的程序LEA DL CONAME;把 CONAME中第一值1 字符偏移地址放入D I中MOV CX,20;把重衩次数放到C X 中MOVAL,20H;把空格符的ASCH值放入A L中CLD;优低到高CHECK:CMP AX,STRINGfSI;依次查找REPNE SCASBMOV BH,DI-1R30.MOV CX,12HMOV SI,0;MOV AX,26H;比敕;把检查到的空格符送到BH 中;把重 次数放到e x 中。造凄用十六暹制表示初始化SI;把&字符的ASCII值放入AX

17、INC SILOOPNE CHECKMOV AX,20H;找到了就退出;把空格符的ASCH值勤放入A X 中MOV STRINGSI-11,AX;用空格符代替&31.(1)用空格符清除PRINTLINE域的程序实现:MOV AL,20HLEAD!,PRINTLINEMOV CX,132CLDREP STOSB 在 STUDENT.ADDR中查找 第一个“二的程序实现:MOV AX,2DHMOV SI,0MOV CX,9;把“一”的 ASCII值放入AX;初始化SI;把重 次数放入e x 中;依次检查STUDENT-ADDR中的字符是否卷找到第一个停下来CHECK:CMP AX,STUDENT_

18、ADDRSI;INC SILOOPNZ CHECK(3)在 STUDENT_ADDR中查找最后一个的程序实现:;和第二题不同的就是道次是彳性右到左查前,所以S I的初始化卷9MOV AX,2DHMOV SI,9MOV CX,9CHECK:CMP AX,STUDENT_ADDRSIDEC SILOOPNZ CHECK(4)程序MOVAL,2OHLEADI,STUDENT;把空格符的ASCII值放入A L中NAME;把 STUDENT_NAME中第一个字符偏移地址放到D I中MOV CX,30CLDREPZ SCASBJZ STORE;用*代替空格;把重复次数放到e x 中;让 D I从低位移到高

19、位;如果有不是空格符的,就退出;如果全是空格符,就转到STORE中STORE:MOVAL2AHMOV CX,30STD;注意,这里是把前面从低到高移动的D I再从高到低移上去REPSTOSB程序实现:;把 STUDENT_NAME移至lj PRINTLINE的前30个字节中LEA SL STUDENT_NAMELEADI,PRINTLINEMOV CX,30CLDREP MOVSB;把 STUDENT.ADDR移至lj PRINT.LINE的后9 个字节中LEA SI,STUDENT_ADDR+9LEA DL PRINT_LINE+132MOV CX,9STDREP MOVSB32.程序实现:

20、LEA SL OLDSLEA DI,NEWSMOV CX,5REPZ CMPSBJNZ NEW_LESS33.(1)CMP DX,CXJA EXCEED(2)CMP BX,AXJG EXCEED(3)CMPCX,0JZ ZERO(4)CMPBX,AXJO OVERFLOW(5)CMPBX,AXJLE EQ_SMA(6)CMPDX,CXJBE EQ_CX34.跳转到:LI(2)跳转到LI(3)跳转到L2(4)跳转到L5(5)跳转到L535.(1)(2)(3)(4)(5)(6)(7)37.可以引起转移到L 1的指令有:可以引起转移到L 1的指令有:可以引起转移到L 1的指令有:可以引起转移到L 1

21、的指令有:可以引起转移到L 1的指令有:可以引起转移到L 1的指令有:可以引起转移到L 1的指令有:NB,BE,同上B,BE,L,NB,NBE,同上同(3)同上LENL,NLEMOV AL,STAUSSIAND AL,2AH结果放到A L中JZ ROUTINE_4XORAL,2AHJZ ROUTINE.1BSF BL,AL;BSR BL,ALCMP BL,CL;把要测试的字节放到A L中;把第一,三,五位为一其他位为0 的数-2 A H,与这个字节比较,:如果结果为0,则三位都为0;前面相与的结果再与2AH异或;如果结果为0,则三位都为1;如果向前和向后测试后,第一个1 的位置相同,说明只有一

22、个1,则异或运算前有A L中有两个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 内容依次为:56H F4H 23H 98H(2)目的地址:384CH 内容依次为:91H

23、 34H F2H 01H(3)目的地址:寄存器,无物理地址 内容依次为:92H 6DH A2H 4CH42.(1)PUSH AX(S P X-(SP+1)-(2)P0P ESI(ESI)-(ESP)(3)PUSH BX(SP)-2-(AH)(SP)(AL)(ESP)+3,(ESP)+2,(ESP)+1,(ESP)-(ESP)+4(SP)(SP)-2(SP+1)-(BX+1)(4)PUSHAD(ESP)-(EAX)(ESP-4)-(ECX)(ESP-8)-(EDX)(ESP-12)-(EBX)(ESP-16)-(ESP)(ESP-20)-(EBP)(ESP-24)-(ESI)(ESP-28)-(

24、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(3)909 0804H44.(1)OFFFF FFFCH(3)0000 0007H(SP)(BX);这里指的是指令执行前的ESP(2)24B 76A0H(4)6F13ADH(2)OFFFFFFF8H(4)0000 0099H45.(EAX)=0(EBX)=25d46.(AX)=3d(DX)=7d47.ADD ECX,ADD ECX,MOV EDI48.IMULBX,(BX)-49.程序实现:MO

25、V AL,BLEDXESI,ECXDX,100H执行的操作是:(DX)*100HCBWIDIV CLIMUL2MOV DX,AX50.JM PD I是直接跳转,执行的操作是:(IP)-(IP)+(DI)JMPDI是间接跳转,执行的操作是:(IP)V-(IP)+(DI)跳转到D I中所指向的内存单元中的指令地址51.假设数组名为NUMBERS,程序如下MOV BX,0MOV CX,100HMOV AL,42HMOV SI,0;后面用到;把循环次数放入e x;初始化SI;CHECK用来实现查找功能CHECK:CMPAL,NUMBERSINC SIJB STORE1JA STORE2LOOPCHEC

26、KSTORE 1 INCMOV UP,;大于42H的数的个数存入UP;小于42H的的数的个数存入DOWN中:相等继续循环BL;找到一个大于4 2 的数,BL值增加1BLLOOPCHECKSTORE2 INC BHMOV DOWN,BHLOOPCHECK第四章1.指令下列指令的错误(1)MOV AH,BX 源操作数与目的操作数长度不相同(2)MOVfBX,S I1 这是两个内存单元在传递数据,而这在汇编语言中是不允许的(3)MOVAX,S ID I不能用两个变址连用,其中一个应为基址(4)MOV MYDATBXSI,ES:AX 同(2)(5)MOV BYTE PTRFBX1,1 0 0 0 必须

27、有一个为寄存器(6)MOV BX,OFFSET MYDATSI OFFSET不能与复杂操作数相连(7)MOVCS,AX 不能对C S赋值(8)MOV ECX,AX 操作数类型不同2.(1)合法(2)非法(3)非法(4)非法3.(1)非法,操作数类型不同(2)合法(3)非法,不允许两个内存单元直接传递数据(4)合法(5)合法(6)合法(7)非法,必须有一个寄存器(8)非法,两个内存单元地址相加没有意义(9)合法(1 0)非法,同(3)4.(1)两内存单元传递数据(2)操作数类型不同(3)跳转指令只能跳转到符号地址(4)转移指令后不能为变量,只能为标号(5)格式不对,应 为 NEAR PTR6.(

28、1)DW 5150H(2)MOV AX,5150HMOV ADDRESS,AX7.DATASG SEGMENTFLD1B DB personal computerFLD2B DB 10DUP(32)FLD3B DB 20H8.PLENTH的值为22,GE表示该数据段的长度9.L的值为710.(1)MOV AX,OFFSET LNAMEFLD4BDB01011001BFLD5BDB32654FLD6BDB10 DUP(0)FLD7BDBPART DUP 20(?);PART2,DUP 50(?);PART3;DUP 14(?)FLD1WDWOFFFOHFLD2WDW01011001BFLD3WD

29、WFLD7BFLD4WDW5,6,7,8,9FLD5WDW5 DUP(0)FLD6WDW(FLD6W-FLD1W)-(FLD7B-FLD1B)(2)MOV SI,WORD PTR CODE_LIST(3)CODE_LENGHT EQU$-CODE_LIST11.代码如下:DATA_SEG SEGMENTDB 5DATA_LIST DW OFFFFH,0,2,5,4,5 DUP DATA.SEG ENDSCODE_SEG SEGMENTASSUME CS:CODE.SEG,DS:DATA_SEGMOV AX,5MOV MAX,AXMOV AX,OFFFFHMOV MIN,AXCODE_SEG E

30、NDS12.(1)10025(2)19(3)2548(4)3(5)103(6)OFFFFH(7)1 (8)313.分别汇编成为:MOV AX,0AHMOV BL,OAHMOV CL,114.(1)(AX)=1(2)(AX)=2(3)(CX)=14H(4)(DX)=32H(5)(CX)=115.(1)操作符错误 改为:DATA_SEG SEGMENT(2)缺少段名 在前面加个段名(3)引用应该从;开始 把 那 个 改 成“;”(4)结 构 混 乱 改 为:MAIN_PROC PROC FARMAIN.PROC ENDPEND16.程序框架如下:DATA_SEG SEGMENT;定莪数摞段ORG

31、0E000H;11下一字皆自地址卷0E000HFIRST_TYPE EQU THIS WORD;建立一保I典下一存普罩元有相同段地址和偏移地址的操作数DATA_GROUPDB 100DUP;给 DATA_GROUP 分配 100 低 I字第的空DATA_SEG ENDS;数撼段尔吉束STACK_SEG SEGMENT;定羲堆楔段ALIGN 16;下一字彳性小段首地址 始STACK DB 100DUP(?);卷堆梭分配空STACK_SEG ENDS;CODE_SEG SEGMENTASSUME CS:CODE_SEG,DS:DATA_SEG,SS:STACK_SEGORG 1000H;下脩指令的

32、第一低1 字第彳隹1000H 始START:MOV AX,DATA_SEGMOV DS,AXMOV AX,STACK_SEGMOV SS,AXCODE.SEG ENDSEND START17o程序如下:D_SEG SEGMENTAUGEND DD 99251D_SEG ENDSE_SEG SEGMENTADDEND DD-15926E_SEG ENDSC_SEG SEGMENTASSUME CS:C_SEG,;结束;数据段定义;附加段定义;代码段定义DS:D_SEG,ES:E_SEGSTART:MOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXMOV EAX,

33、DS:AUGENDADD EAX,ES:ADDENDMOV DS:SUM,EAXC_SEG ENDSEND START;结束19.需要加上PTR伪操作的有:(2)(3)(4)第五章1.程 序 凰(幺 监 DEBUG;调 通遇)code segmentmain proc farassume cs:codestart:mov ah,lhint 21hsub al,20hmov ah,2mov dl,alint21hmain endpcode endsend start2.程序 现:(幺 电 DEBUG 通谩)code segmentassume cs:codemov ah,l hint21hsub

34、 al,lhmov cl,3again:mov dl,almov ah,2int21hinc alloop againcode endsend3.程序(D E B U G III通谩)code segmentassume cs:codemov ax,OfOfehmov cl,4;把 A X 的最高四位rol ax,cl;移到最右面and al,Ofh;再把A L的高四位清0mov dl,alrol ax,cland al,Ofhmov cl,alrol ax,cland al,Ofhmov bl,alrol ax,cland al,Ofhcode endsend4.程序 现:DEBUG III

35、就通谩一)data segmentstring 1 db 20,0,20 dup(?)string2 db 20,0,20 dup(?)string3 db please input string 1 !;$string5 db match!VS,string6 db nomatch J/S1data endscode segmentMAIN PROC FARassume csicode,dsidatastart:push ax;保埸push bxpush expush dxmov ax,datamov ds,axmov dx,offset string3call info;在屏幕上输出提示信

36、息mov dx,offset string Icall input;在第一彳酎显输入字符串mov dx,offset string4call info;在屏幕上输出提示信息mov dx,offset string2call input;在第二 律i l l 输入字符串call check;比较雨他I字符串pop dx;寄存器出梭pop expop bxpop axmain endp;输 入 字 符 串 到 的 谩 程INPUT PROC NEARpush axmov ah,0AHint 21hpop axretINPUT ENDP;在屏幕上输出提示信息的谩程INFO PROC NEARpush

37、 axmov ah,9int21hcall crlf;回隼换行pop axretINFO ENDP;回隼换行的谩程CRLF PROC NEARpush dxpush axmov dl,Odhmov ah,2int21hmov dl,0ahmov ah,2int21hpop axpop dxretCRLFENDP;比较雨字符串是否相同旋且在屏幕上输出相IB信息的谩程CHECK PROC NEARpush axpush expush sipush dimov ax,0mov cx,0mov cl,string 1+1mov si,2mov di,2mov al,stringldicmp al,st

38、ring2sijnz noinc diinc sidec exjnz remov dx,offset string5call infojmp exitmov dx,off set string6call infoexit:pop dipop sipop expop axretCHECK ENDPcode endsend start5.程序瑞DEBUGS就通谩)data segmentinfo 1 db PLEASE INPUT A NUMBER;*;提示信息,下同info2 db WRONG NUMBER!PLEASE INPUT ANOTHER N U M B E R!,;如果工建入非数字值

39、,辍 金 昔,或提示输入新的数字data endscode segmentMAIN PROC FARassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,oifset infolcall info;提示Wi入一flil数字call input;输入谩程call check;检查是否非数字字符call bell;簪 金 令 N 次,N 卷维入数字retMAIN ENDP;在屏幕上输出提示信息的谩程INFO PROC NEARpush axmov ah,9hint21hcall crlfpop axretINFO ENDP;回隼换行的遇程CR

40、LF PROC NEARpush axpush dxmov dl,Odhmov ah,2hint21hmov dLOahmov ah,2hint21hpop dxpop axretCRLFENDP;输入的谩程INPUT PROC NEARmov ah,lint 21hretINPUT ENDP;检查是否非数字字符的谩程CHECK PROC NEARpush dxcmp al,3Oh;如果维入的字符ASCII值小於0 的 ASCII值 30H,jb WRONG;刚斡入W RONG,作 金 昔 理cmp al,39h;如果$建入的字符ASCII值大於9 的 ASCII值 39H,ja WRONG;

41、到 入 W RONG,作金昔 理mov cl,al;把合法的数字ASCII值放入C L 中jmp next;金普 理谩程,提示,或等待用户筵入新值WRONG:mov dx,offset info2call infocall inputcall checknext:pop dxretCHECK ENDP;根撼用户维入的数字,簪金令相愿的次数BELL PROC NEARpush dxsub cl,30h;$建入数字的ASCII值减去3 0,才能成卷次数mov dl,7hmov ah,2re:int21hdec exjnz repop dxretBELLENDPCODE ENDSEND START6

42、.程序(末经调试).model small.datam db dup(20 10数)n db 20,0,20 dup(?);用于存放负数的最大容量为20的数组p db 20,0,20 dup;同上,用于存放正数.codemain proc farstart:mov ax,datamov ds,axcall check_store;判断数的正负加存入相call display;在屏幕上Si示main endpcheck_store proc nearpush axpush bxpush exmov ex,20;循猿次数放入CXcld;使 S I向增加的方向移勤lea si,m;M 的偏移地址放入

43、SIagain:mov al,si;M 中的数依次放入AL中emp al,0;且依次和0 比敕jl store_in_n;如果小於0,刖存入负数知1jg store_in_p;如果大於0,刚存入正数幺目dec exjnz againjz exitstore_in_n:push bxmov bl,nl;N 中已有数的侏1数放入B L中,mov nfbl+l,al;把 A L中负数存入数Si N 的最彳爰彳固数字的下一字W fpop bxjmp againstore_in_pSTOREINPpush bxmov bl,plmov pbl+l,alpop bxjmp againexit:pop ex

44、pop bxpop axretcheck_store endpdisplay proc nearpush exlea si,n2mov cl,nH;数 幺 且 N 中 数 的 数 放 入 CLcldmov ah 2re_display_n:;依次IS示各他1负数mov dl,siint 21 hmov dl,2Oh;各值II!(之IW 用空格 隔int 21hdec cljnz re_display_n;下面四行用来回隼和换行mov dl,Odhint 21hmov dl,Oahint 21h;同上面负数的 示,lea si,p2mov ch,pll Jcldre_display_p:mov

45、dl,siint 2lhmov dl,20hint 21hdec chjnz re_display_ppop exretdisplay endpend start7.程 序(未.model small.datadata db lOOd dup(100f|ilM.codestart:mov ax,datamov ds,axmov cx,101d;循璟次数mov bl,Ofeh;初始化B X卷最大的八位辗符号虎正数mov si,offsetdatacldagain:dec exjz finish;全部判断完成mov al,sicbwdiv 2;每他数除以2emp al,0;余数不卷0的,不是偶数j

46、ne againemp bl,si;每次比敕,jl again;较小的数,mov bl,si;代替B X中原来的数jmp againfinish:mov ax,0mov al,bl;把最小偶数放到A X中end start8.程序 5(。(未 输0.modelsamll.codestart:mov ch,9;比较次数放入CHmov cl,2;每次A X循左移的次数放入CLmov dl,0;初始化DL,D L,中存放“四分之一字第三的他数again:dec ch;如果AX最接雨假I字 循璟结束,jz display;刖在屏幕上输出悬“3”的低I数rol ax,clmov bl,aland bl,

47、3cmp bl,3;如果“四分之一字筋不卷3,jnz again;刖判断下一低1“四分之一字第”inc dl;否印J,DL增加一jmp againdisplay:;在屏幕上输出D L内容mov ah,2int 21hend start9.程序宣现:.model small.datainfol db,PLEASE INPUT A NUMBER!;0DH,0AH,$;提示信息,下同info2 db ILLEGAL CHAR,PLEASE TYPE IT AGAIN!:0DH,0AH,$.codemain proc farstart:PUSH axpush bxpush expush dxmov a

48、x,datamov ds,axmov dx,offset infolcall dis_str;在屏幕上 示提示信息call input_num;输入十六暹制数call dis_num;在屏幕上输出二迤制数pop dxpop expop bxpop axRETmain endp;在屏幕上 示提示信息的遇程dis_str proc nearpush axmov ah,9int 21hpop axretdis_str endp;输入一俯1四位十六迤制数,或保存在B X 中的谩程input_num proc nearpush axpush exmov bx,0;初始化 BXmov ch,4;循璟次数(

49、十六ifi制数的位数!)new_char:mov ah,lint21hsub al,3Oh;把 ASCII值斡换成卷二谨制数emp al,0;和 0 相比,jl wrong;如果比0 小,言兑明不是数字一,斡往非法字符虑理谩程,emp al,9;是否 A-F?jle add_to;如果是0-9,直接放入BX 中sub al,7;如果是A-F,减去7,emp al,16;再和 16D(1 0 H)相比,jg wrong;如果大於16D,明不是数字,傅入非法字符虑理谩程add_to:mov cl,4;BX每次左移四位shl bx,clmov ah,0add bx,axdec chjz exitj

50、mp new_char;输入新的数字wrong:push dxmov dx,offset info2call dis_strpop dxjmp new_charexit:pop expop axretinput_numendp;在屏幕上输出二暹迤制数的谩程dis_num proc nearmov ex,16mov ah,2re:rol bx,lmov dl,bland dljadd dl,3Ohint 21hdec exjnz reretdis_num endpend start10.程 序 琉(D E B U G通 谩).model samll.dataeng db hello,sun.ho

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

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com