汇编试题库.pdf
《汇编试题库.pdf》由会员分享,可在线阅读,更多相关《汇编试题库.pdf(128页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、以下加*的题不要求;加*的题本学期不要求。L显示数据区中的一个字符DATA SEGMENTA DB yDATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV DL,AMOV AH,2INT 21HMOV AH,4cHINT 21HCODE ENDSEND START;取要显示的字符到D L中;调2 号 DOS系统功能调用显示一位二进制码;利用4CH号 DOS系统功能调用退回DOS2.显示数据区中的一个十进
2、制数字DATA SEGMENTA DB 8DATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV DL,AADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START;取要显示的字符到D L中;将十进制数字变成ASCH码;调2 号 DOS系统功能调用显示一位二进制码;利用4C H 号DOS系统功能调用退回DOS3.10以内的加法程序并显示结果DA
3、TA SEGMENTA DB 6B DB 3DATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVDL,A;取一个加数到DL中ADDDL,B;加另一个加数ADDDL,30H;将和变成ASCII码MOVAH,2;调2 号 DOS系统功能调用显示一位二进制码INT21HMOVAH,4CH;利用4CH号 DOS系统功能调用退回DOSINT21HCODE ENDSEND START4.以二进制形式显示一个字符的ASC
4、II码DATA SEGMENTADBA,BDBCDBB,0DH,0AH,$DATAENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,B;取“A)=$首地址至ij DX 中MOVAH,9;利用9 号 DOS系统功能调用显示(A)=INT21HMOV BL,A;取要显示的字符到B L中MOVCL,8;循 环 8 次,每次显示一位NEXT:MOVDL,0;2 号 DOS系统功能调用要求将欲显示的;字符的ASCII码
5、放至D L中SALBL,1;欲显示的字符左移一位,移出部分到C F中RCLDL,1;移出到C F中的部分移到D L中ADDDL,30H;移入D L的可能是1,也可能是0,变成ASCII码MOVAH,2;调2 号 DOS系统功能调用显示一位二进制码INT21HDECCL;循环次数减1JNENEXT;如果减1 后不到0,转 NEXTLEADX,C;取变量C 的首地址到DX 中MOVAH,9;利用9 号 DOS系统功能调用显示单位“B”及回车换行INT 21HMOV AH,4CHINT 21H;利用4CH号 DOS系统功能调用退回DOSCODE ENDSEND START5.二进制数转换为十进制数将
6、 DO起字单元中存放的1 6 位二进制数转换为十进制数,并将其ASCII码存入DI所指向的缓冲区BUF中,最后显示出来。程序如下所示:DATASEGMENTBUFDB 5 DUP(?);预留5 单元空间DODW 2A5HDATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDI,OFFSET DO;将D I指向BUF的下一单元MOVAX,DO;取要用来变十进制数的数到AXMOVBX,10;准备除以10MOVCX,0;准备统计余数的个数CHANGE 10:DECDI;准备存放余数,往前倒存INCCXMOVDX,0
7、;将除数的高16位(在 D X 中)清 0,DX也将用来存放余数DIVBX;DX,AX 除以 BX(BX=10)ADDDL,30H;余数变为ASCII码值MOVBYTE PTRDI,DL;存储十进制数CMPAX,0;是否为0?JNZCHANGE 10;不为 0 转 CHANGE10CHANGE11:MOV DL,BYTE PTRDI;取出存放在BUF中的卜进制数到DL供显示MOVAH,2;显 示 1个字符INT21HINCDILOOPCHANGE 11MOVAH,4CH;程序结束并返回DOSINT21HCODEENDSENDSTART6.A S C II码表示的十进制数转换为二进制数并显示将
8、S I指向的缓冲区BUF中保存的五位ASCII码卜进制数(0-65535)转换成对应的二进制数并存放在D X 中,再以二进制形式显示。DATA SEGMENTBUF DB 25092,C DB,B;0DH,0AH;$,DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSLOFFSETBUF;将BUF的地址放到S I中MOVDX,0;清D X为0;MOVCX,5;置循环次数为5MOVBX,10GET_ASC:MOVAL,SI;取出一个字符CMPAL;0,;必须保证5个数都是十进制数(0-9)JBEXITCM
9、PAL,*9JAEXIT;判断是否是“0”-“9”DEC_BIN:SUBAL,30H;减30H变二进制数MOVAH,0PUSHAX;转换为对应的数并置于A X中,转存堆栈MOVAX,DXMULBX;A X内容乘10MOVDX,AXPOPAXADDDX,AX;(DX)-(D X)*10+(AX)INCSI;使指针S I指向下一个字符DECe xJNZGET_ASCMOVBX,DX;取要显示的字符到B L中MOVCL,16;移16次,最大数64000NEXT:MOVDX,0SALBX,1RCLDX,1ADDDX,30HMOVAH,2INT21HDECCLJNENEXTLEADX,C;取C的地址,以
10、便显示单位B与回车换行MOVAH,9INT21HEXIT:MOVAH,4CHINT21HCODEENDSEND START7.二进制数到十六进制数的转换二进制整数转换为ASCII码十六进制数的基数为16,显示时注意从9到A,ASCII码跳了 7!其他类似于例4.8。DATA SEGMENTBUF DB 5 DUP(?);预留5 单元空间DO DW 100010011010001 IBDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA8.ASCII码表示的十六进制数到二进制数的转换START:MOVAX,DATAMOVDS,AXMOVDI,OFFSET DO;
11、将口1指向BUF的下一单元MOVCX,0MOVAX,DO;取要用来变十六进制数的数到AXMOVBX,16;准备除以16CBUF10:DECDI;准备存放余数,往前倒存INCCXMOVDX,0;将除数的高16位(在 D X 中)清 0,DX也将用来存放余数DIVBX;DX,AX 除以 BX(BX=16)ADDDL,30H;余数变为ASCII码值MOVBYTE PTRDI,DL;存储十六进制数CMPAX,0;是否为0?JNZCBUF10;不为0 转 CBUF10CHANGE11:MOVDL,BYTE PTRDI;取出存放在BUF中的十六进制数到DL供显示CMPDL,3AH;是否小于10?JBCHA
12、NGE 12;如果小于10转显示ADDDL,7;否则为A 到 F 之间数,加 7CHANGE 12:MOVAH,2;显 示 1个字符INT21HINCDILOOPCH ANGE 11MOVAH,4cH;程序结束并返回DOSINT21HCODEENDSENDSTART从键盘输入四位十六进制数,将其转换十六位二进制数,并保存在DX 寄存器中,再显示。程序分析:十六进制数的数字符为0-9和 a-f(或 A-F),输入后以ASCII码 30H-39H和61H-66H(或 41H-46H)存入AL。明显,如是数字键0-9,其 ASCII码减去30H,即是该位十六进制数对应的四位二进制值。而如是字符键a-
13、f或 A-F,其 ASCII码则要分别减去57H和37H,得到的差才是所输入的十六进制数字符对应的四位二进制值。CODESEGMENTASSUMECS:CODESTART:MOVDX,0MOVBL,4;输入字符个数INPUT:MOVAH.01HINT21H;键盘输入SUBAL,30HJLNEXT1;输入的是十六进制数外其它字符CMPAL,0AHJLCHANGE;输入0-9SUBAL,07HCMPAL,0AHJLNEXT1;输入的是十六进制数外其它字符CMPAL,0FHJLECHANGE;输入A-FSUBAL,20HCMPAL,0AHJLNEXT1;输入的是十六进制数外其它字符CMPAL,0FH
14、JLECHANGE;输入a-fJMPNEXT1;输入的是十六进制数外其它字符CHANGE:MOVCL,4SHLDX,CLMOVAH,0ADDDX,AX;(DX)*-(DX)*16+(AX)DECBLJNZINPUTNEXT1:MOV BX,DX;取要显示的字符到B L中MOVCL,16;移 16次NEXT2:MOV DX,0SALBX,1RCLDX,1ADDDX,30HMOVAH,2INT21HDECCLJNENEXT2MOVDL,BMOVAH,2INT21HEXIT:MOVAH,4CHINT21HCODE ENDSEND START9.求计算二个字类型无符号数的和并以十进制形式显示。设和的大
15、小不超过16位二进制数。DATA SEGMENTBUF DB 5 DUP(?)A DW 2598B DW 6234DATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:D ATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AX,AADD AX,BMOVDI,OFFSET A;将 D I指向BUF的下一单元MOVBX,10;准备除以10MOVCX,0;准备统计余数的个数CHANGE10:DEC DI;准备存放余数,往前倒存INCe xMOVDX,0;将除数
16、的高16位(在 DX 中)清 0,DX也将用来存放余数DIVBX;DX,AX 除以 BX(BX=10)ADDDL,30H;余数变为ASCII码值MOVBYTE PTRDI,DL;存储十进制数CMPAX,0;是否为0?JNZCHANGE 10;不为 0 转 CHANGEI0CHANGE11:MOV DL,BYTE PTRfDI;取出存放在BUF中的十进制数到DL供显示MOVAH,2;显 示 1 个字符INT21HINCDILOOPCH ANGE 11MOV AH,4CHINT 21HCODE ENDSEND START(1)将 A、B 改为:A DW 2A5AHB DW 623FH10.求 B+
17、C的和并以十六进制形式显示。本程序段要求在数据区设置变量BUF与 A,BUF设置情况为:DB 5 DUP(?)A 为其下的一个变量名。DATA SEGMENTBUF DB 5 DUP(?)A DW?B DW 2598C DW 6234DATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:D ATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAX,BADDAX,CMOVDI,OFFSET A;将D I指向BUF的下一单元MOVCX,0MOVBX,16;准备除以1
18、6CBUF10:DECDI;准备存放余数,往前倒存INCCXMOVDX,0;将除数的高16位(在 DX中)清 0,DX也将用来存放余数DIVBX;DX,AX 除以 BX(BX=16)ADDDL,30H;余数变为ASCII码值MOVBYTE PTRDI,DL;存储十六进制数CMPAX,0;是否为0?JNZCBUF10;不为0 转 CBUF10CHANGE11:MOVDL.BYTE PTRDI;取出存放在BUF中的十六进制数到DL供显示CMPDL,3AH;是否小于10?JBCHANGE 12;如果小于10转显示ADDDL,7;否则为A 到 F 之间数,加7CHANGE 12:MOV AH,2;显
19、示 1个字符INT21HINCDILOOPCH ANGE 11EXIT:MOVAH,4CH;程序结束并返回DOSINT21HCODE ENDSEND START11.检查4 个输入的数,如果是16进制数字就保留并显示,否则停止输入并退出。CODESEGMENTASSUME CS:CODESTART:MOVDX,0MOVBL,4;输入字符最多多少个的个数INPUT:MOV AH,01HINT21H;键盘输入SUBAL,30HJLEXIT;如果输入小于0 的字符退出CMPAL,0AH;和0人相比较JLCHANGE;如果小于0AH表示输入的是0-9SUBAL,07H;看看输入的是不是大写的A-FCM
20、PAL,0AH;如果减07H后小于0AH表示比大写的A 小JLEXIT;小于表示输入的是其它字符,退出CMPAL,0FH;如果减07H后大于OFH,表示比F 大JLECHANGE;小于等于表示输入的数在A-F之间,存到D X 中去SUBAL,20H;如果大于大写F,再看是否是a-fCMPAL,0AHJLEXIT;如果小于a,说明输入的是其它字符,退出CMPAL,0FH;再看是否大于fJLECHANGE;小于等于表示输入的是a-f,存到D X 中去JMPEXIT;输入其它字无条件退出CHANGE:MOV CL,4SHLDX,CL;D X 中数左移4 位(因为是16进制数)MOVAH,0;清AH,
21、只保留AL,再将D X 中原来的数和A X 中新数相加ADD DX,AX;(DX)-(D X)*16+(AX)DECBL;BL减 1,控制做4 次循环JNZINPUT;再输下一个数直到4 个数EXIT:MOVAH,4CH;程序结束并返回DOSINT21HCODE ENDSEND START1 2 .求一个数X的 9-X 并显示从键盘上输入1 到 9 中任一自然数X,计算9-X 的值并输出。DATA SEGMENTINPUT DB PLEASE INPUT X(09):$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATA;数据段
22、寄存器的装填CODEMOV DS,AX;送段地址MOV AH,09HMOV DX,OFFSET INPUTINT 21H;输出提示字符串INPUTMOV AH,01HINT 21H;从键盘输入一个X 对应的字符:(“0”-“9”)AND AL,0FH;将输入的字符“0”一 “9”转换为数据X:09MOV DL,9SUB DL,AL;计算 9XMOV AH,02HADD DL,30HINT 21H;输出 9-XMOV AH,4CHINT 21H;程序正常结束并返回DOSENDSEND START1 3 .求解二元一次方程组:A1 X+B 1 Y=C 1A2 X+B 2 Y=C 2假设各系数均为字
23、节类型无符号数,解均为一位十进制数。DATA SEGMENTAl DB 27Bl DB 81Cl DB 243A2 DB 54B2 DB 30C2 DB 222MESSI DB,XW?加MESS2 DB 0DH,0AH;y=,?;$,DATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,AlMULB2MOVSI,AX;al*b2放到S I中MOVAL,A2MULBl;a2*blSUBSI
24、,AX;al*b2-a2*blMOVAL,ClMULB2MOVBX,AX;cl*b2MOVAL,C2MULBlSUBBX,AX;cl*b2-c2*blMOVAX,BXCWD;符号扩展,A X 中符号扩到DX中IDIVSI;带符号除法(cl*b2-c2*bl)/(al*b2-a2*bl)ADDAL,30H;变成ASCII码MOVDI,2;在M ESSI的第2 字节预留有放结果的地方MOVMESSI DI,AL;将 X 的解放到MESS1的第2 字节处MOVDX,OFFSET MESSIMOVAH,9;调用9 号功能显示X=*INT21HMOVAL,AlMULC2MOVDX,AX;al*C2放到D
25、 X 中MOVAL,A2MULClSUBDX,AX;al*C2-a2*ClMOVAX,DXCWD;符号扩展,A X 中符号扩到DX中IDIVSI;带符号除法(al*C2-a2*Cl)/(al*b2-a2*bl)ADDAL,30H;变成ASCII码MOVDI,4;在MESS2的第4 字节预留有放结果的地方MOVMESS2DI,AL;将 Y 的解放到MESS2的第4 字节处MOVDX,OFFSET MESS2MOVAH,9;调用9 号功能显示Y=*INT21HMOVAH,4CHINT21HCODE ENDSEND START14.回答注释中提出的问题。DATA SEGMENTADW35H,9AC9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 试题库
限制150内