汇编试题.pdf
《汇编试题.pdf》由会员分享,可在线阅读,更多相关《汇编试题.pdf(127页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.显示数据区中的一个字符DATA SEGMENTA DB yDATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVMOVAX,DATADS,AXMOVDL,A;取要显示的字符到D L中MOVINTAH,221H;调2 号 DOS系统功能调用显示一位二进制码MOV AH,4cHINT 21HCODE ENDS;利用4CH号 DOS系统功能调用退回DOSEND START2.显示数据区中的一个十进制数字DATA SEGMENTA DB 8DATA
2、 ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVMOVAX,DATADS,AXMOVDL,A;取要显示的字符到D L中ADDDL,30H;将十进制数字变成ASCII码MOVINTAH,221H;调2 号 DOS系统功能调用显示一位二进制码MOV AH,4cHINT 21HCODE ENDS;利用4CH号 DOS系统功能调用退回DOSEND START3.10以内的加法程序并显示结果DATA SEGMENTA DB 6B DB 3DATA ENDS
3、STACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVDL,A;取一个加数到D L中ADDDL,B;加另一个加数ADDDL,30H;将和变成ASCII码MOVAH,2;调2 号 DOS系统功能调用显示一位二进制码INT21HMOVAH,4cH;利用4CH号 DOS系统功能调用退回DOSINT21HCODE ENDSEND START4.以二进制形式显示一个字符的ASCII码DATA SEGMENTA DB 4B DB A)=$
4、C DB B,0DH,0AH,$DATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,B;取“(A)=$,首地址到D X 中MOVAH,9;利用9 号 DOS系统功能调用显示(A)=INT21HMOV BL,A;取要显示的字符到B L中MOVCL,8;循环8 次,每次显示一位NEXT:MOVDL,0;2 号DOS系统功能调用要求将欲显示的;字符的ASCII码放到D L中SALBL,1;欲显示的字符左移一
5、位,移出部分到C F中RCLDL,1;移出到C F中的部分移到D L中ADDDL,30H;移入D L的可能是1,也可能是0,变成ASCH码MOVAH,2;调2 号 DOS系统功能调用显示一位二进制码INT21HDECCL;循环次数减1JNENEXT;如果减1 后不到0,转 NEXTLEADX,C;取变量C 的首地址到DX 中MOVAH,9;利用9 号 DOS系统功能调用显示单位“B”及回车换行INT21HMOV AH,4CHINT 21H;利用4CH号 DOS系统功能调用退回DOSCODE ENDSEND START5.二进制数转换为十进制数将 DO起字单元中存放的1 6 位二进制数转换为十进
6、制数,并将其ASCII码存入D I所指向的缓冲区BUF中,最后显示出来。程序如下所示:DATABUFDODATASEGMENTDB 5 DUPC?);预留5 单元空间DW 2A5HENDSCODE SEGMENTASSUME CS:CODE,DS:DATACHANGE11:MOV DL,BYTE PT R fD I;取出存放在BUF中的十进制数到DL供显示START:MOV AX,DATAMOV DS,AXMOV DI,OFFSET DO;将DI指 向 BUF的下一单元MOV AX,DO;取要用来变十进制数的数到AXMOV BX,10;准备除以10MOV CX,0;准备统计余数的个数CHANG
7、E 10:DEC DI;准备存放余数,往前倒存INC CXMOV DX,0;将除数的高16位(在 D X 中)清 0,DX也将用来存放余数DIV BX;DX,AX 除以 BX(BX=10)ADD DL,30H;余数变为ASCH码值MOV BYTE PTRDI,DL;存储十进制数CMP AX,0;是否为 0?JNZ CHANGE 10;不为。转 CHANGE10CODEMOV AH,2;显 示 1个字符INT 21HINC DILOOP CHANGE 11MOV AH,4cH;程序结束并返回DOSINT 21HENDSEND START6.ASCII码表示的十进制数转换为二进制数并显示将 S I
8、指向的缓冲区BUF中保存的五位ASCII码十进制数(0-65535)转换成对应的二进制数并存放在DX中,再以二进制形式显示。DATA SEGMENTBUF DB,25092,C DB B;0DH,0AH,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF;将BUF的地址放到S I中MOVDX,0;清D X为0;MOVCX,5;置循环次数为5MOVBX,10GET_ASC:MOVAL,SI;取出一个字符CMPAL/O;必须保证5个数都是十进制数(0-9)JBEXITCMPAL,9J
9、AEXIT;判断是否是“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;取要显示的字符到BL 4MOVCL,16;移16次,最大数64000NEXT:MOVDX,0SALBX,1RCLDX,1ADDDX,30HMOVAH,2INT21HDECCLJNENEXTLEADX,C;取C的地址,以便显示单位B与
10、回车换行MOVAH,9INT21HEXIT:MOVAH,4CHINT21HCODEENDSEND START7.二进制数到十六进制数的转换二进制整数转换为ASCII码十六进制数的基数为16,显示时注意从9到A,ASCII码跳了 7!其他类似于例4.8oDATASEGMENTBUFDB 5 DUP(?);预留5 单元空间DODW 100010011010001 IBDATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDI,OFFSET DO;将口1指 向 BUF的下一单元MOVCX,0MOVAX,DO;取要用来
11、变十六进制数的数到AXMOVBXJ6;准备除以16CBUFIO:DECDI;准备存放余数,往前倒存INCCXMOVDX,0;将除数的高16位(在 DX中)清 0,DX也将用来存放余数DIVBX;DX,AX 除以 BX(BX=I6)ADDDL,30H;余数变为ASCII码值MOVBYTE PTRDI,DL;存储十六进制数CMPAX,0;是否为0?JNZCBUF10;不为。转 CBUF10CHANGE11:MOVDL.BYTE PTRDI;取出存放在BUF中的十六进制数到DL供显示CMPDL,3AH;是否小于10?JBCHANGE 12;如果小于10转显示ADDDL,7;否则为A 到 F 之间数,
12、加 7CHANGE 12:MOVAH,2;显 示 1个字符INT21HINCDILOOPCHANGE 11MOVAH,4CH;程序结束并返回DOSINT21HCODEENDSENDSTART8.ASCII码表示的十六进制数到二进制数的转换从键盘输入四位十六进制数,将其转换卜 六位二进制数,并保存在D X 寄存器中,再显示。程序分析:十六进制数的数字符为0-9和 a-f(或 A-F),输入后以ASCH码 30H-39H和61H-66H(或 41H46H)存入AL。明显,如是数字键0-9,其 ASCII码减去30H,即是该位十六进制数对应的四位二进制值。而如是字符键a-f或 A-F,其 ASCH码
13、则要分别减去57H和37H,得到的差才是所输入的十六进制数字符对应的四位二进制值。CODE SEGMENTASSUMECS:CODESTART:MOVDX,0MOVBL,4;输入字符个数INPUT:MOVAH,01HINT21H;键盘输入SUBAL,30HJLNEXT1;输入的是十六进制数外其它字符CMPAL,0AHJLCHANGE;输入0-9SUBAL,07HCMPAL,0AHJLNEXT1;输入的是十六进制数外其它字符CMPAL,0FHJLECHANGE;输入A-FSUBAL,20HCMPAL,0AHJLNEXT1;输入的是十六进制数外其它字符CMPAL,0FHJLECHANGE;输入a-
14、fJMPNEXT1;输入的是十六进制数外其它字符CHANGE:MOVCL,4SHLDX,CLMOVAH,0ADDDX,AX;(DX)-(D X)*16+(AX)DECBLJNZINPUTNEXT1:MOV BX,DX;取要显示的字符到B L 中MOVCL,16;移 16次NEXT2:MOV DX,0SALBX,1RCLDX,1ADDDX,30HMOVAH,2INT21HDECCLJNENEXT2MOVDL,BMOVAH,2INT21HEXIT:MOVAH,4CHINT21HCODEENDSEND START9.求计算二个字类型无符号数的和并以十进制形式显示。设和的大小不超过16位二进制数。DA
15、TA SEGMENTBUF DB 5 DUP(?)A DW 2598B DW 6234DATA ENDSSTACK SEGMENT STACKDB 200 DUP(O)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AX,AADD AX,BMOV DI,OFFSET A;将 DI指向BUF的下一单元MOV BXJO;准备除以10MOV CX,0;准备统计余数的个数CHANGE 10:DEC DI;准备存放余数,往前倒存INC CXMOV DX,0;将除数的高16位(在 D X
16、中)清 0,DX也将用来存放余数DIV BX;DX,AX 除以 BX(BX=10)ADD DL,30H;余数变为ASCII码值MOV BYTE PTRLDIJ,DL;存储十进制数CMP AX,0;是否为 0?JNZ CHANGE 10;不为 0 转 CHANGE 10CHANGElkMOV DUBYTE PTRfDI;取出存放在BUF中的十进制数到DL供显示MOV AH,2;显 示 1个字符INT 21HINC DILOOP CH ANGE 11MOV AH,4CHINT 21HCODE ENDSEND START(1)将 A、B 改为:A DW 2A5AHB DW 623FH10.求 B+C
17、的和并以十六进制形式显示。本程序段要求在数据区设置变量BUF与 A,BUF设置情况为:DB 5 DUPC?)A 为其下的一个变量名。DATA SEGMENTBUF DB5DUP(?)A DW?B DW 2598C DW 6234DATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAX,BADDAX,CMOVDI,OFFSET A;将口1指向BUF的下一单元MOVCX,0MOVBX,16;准备除以16CBUF
18、10:DECDI;准备存放余数,往前倒存INCCXMOVDX,0;将除数的高16位(在 D X 中)清 0,DX也将用来存放余数DIVBX;DX,AX 除以 BX(BX=16)ADDDL,30H;余数变为ASCII码值MOVBYTE PTRD1,DL;存储十六进制数CMPAX,0;是否为0?JNZCBUF10;不为0 转 CBUF10CHANGE11:MOVDL,BYTEPTRDI;取出存放在BUF中的十六进制数到DL供显示CMPDL,3AH;是否小于10?JBCHANGE 12;如果小于10转显示ADDDL,7;否则为A 到 F 之间数,加 7CHANGE 12:MOV AH,2;显 示 1
19、 个字符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-FCMPA
20、L,0AH;如果减07H后小于0AH表示比大写的A 小JLEXIT;小于表示输入的是其它字符,退出CMPAL,0FH;如果减07H后大于0FH,表示比F 大JLECHANGE;小于等于表示输入的数在A-F之间,存到D X 中去SUBAL,20H;如果大于大写F,再看是否是a-fCMPAL,0AHJLEXIT;如果小于a,说明输入的是其它字符,退出CMPAL,0FH;再看是否大于fJLECHANGE;小于等于表示输入的是a-f,存到DX 中去JMPEXIT;输入其它字无条件退出CHANGE:MOV CL,4SHLDX,CL;D X 中数左移4 位(因为是16进制数)MOVAH,0;清AH,只保留
21、AL,再将D X 中原来的数和A X 中新数相加ADD DX,AX;(DX)(DX)*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(0-9):$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:。一9MOV DL,9SUB DUAL;计算 9-XMOV AH,02HADD DL,30HINT 21H;输出 9-XMOV AH,4CHINT 21H;程序正常结束并返回DOSENDSEND START1 3 .求解二元一次方程组:A 1 X+B 1 Y=C 1A 2X+B 2Y=C 2假设各系数均为字节类型无符号
23、数,解均为一位十进制数。DATA SEGMENTAl DB 27Bl DB 81Cl DB 243A2 DB 54B2 DB 30C2 DB 222MESSI DBMESS2 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 放至IJSI 中MOVAL,A2MULBl;a2*blSUBSI,AX;al*b
24、2-a2*blMOVAL,ClMULB2MOVBX,AX;c 1 *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;在MESSI的第2 字节预留有放结果的地方MOVMESSI DI,AL;将X 的解放到MESS1的第2 字节处MOVDX,OFFSET MESSIMOVAH,9;调用9 号功能显示X=*INT21HMOVAL,AlMULC2MOVDX,AX;al*C2放到D X 中MOV
25、AL,A2MULClSUBDX,AX;al*C2-a2*CIMOVCWDIDIVADDMOVMOVMOVMOVINTMOVINTAX,DX;符号扩展,A X 中符号扩到DX 中SI;带符号除法(al*C2-a2*Cl)/(al*b2-a2*bl)AL,30H;变成 ASCII 码D1.4;在乂$2 的第4 字节预留有放结果的地方MESS2DI,AL;将Y 的解放到MESS2的第4 字节处DX,OFFSET MESS2AH,9;调用9 号功能显示Y=*21HAH,4CH21HCODE ENDSEND START14.回答注释中提出的问题。DATA SEGMENTADW35H,9AC9HDB34H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 试题
限制150内