汇编语言程序设计习题答案.pdf_第1页
汇编语言程序设计习题答案.pdf_第2页
汇编语言程序设计习题答案.pdf_第3页
汇编语言程序设计习题答案.pdf_第4页
汇编语言程序设计习题答案.pdf_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

4.1分析执行下列指令序列后的结果: 1)MOVAX,1234H MOVBX,00FFH ANDAX,BX 【答】(AX)=0034H 2)MOVAL,01010101B ANDAL,00011111B;(AL)=00010101B ORAL,11000000B;(AL)=11010101B XORAL,00001111B;(AL)=11011010B NOTAL 【答】(AL)=00100101B 3)MOVDL,05H MOVAX,0A00H MOVDS,AX MOVSI,0H MOVCX,0FH AGAIN: INCSI CMPSI,DL LOOPNE AGAIN HLT 本程序实现了什么功能? 【答】在以 0A001H 开始的 15 个单元中查找 05H。 4)MOVAX,DSEGADDR MOVDS, AX MOVES,AX MOVSI, OFFSET B1ADDR MOVDI,OFFSET B2ADDR MOVCX,N CLD REPMOVSB HLT 本程序实现了什么功能? 【答】 将 B1ADDR 中 N 个字节数据传送到 B2ADDR 开始的 15 个存储单元 。 5)MOVAX, 0H MOVDS,AX MOVES, AX MOVAL,05H MOVDI,0A000H MOVCX,0FH CLD AGAIN: SCASB LOOPNEAGAIN HLT 本程序实现了什么功能? 【答】从地址 0A000H 开始的 15 个单元中查找字节型数据 05H,用条件循环 LOOPNZ,控制数 据 05H 的查找。 4.2阅读程序: 1).CLD LEADI,0100H MOVCX, 0080H XORAX, AX REPSTOSW 本程序实现了什么功能? 【答】将 DS 中起始地址为 0100H 的 128 个字节单元清零。 2).MOVAL, 08H SALAL,01H;(AL)=00010000H MOVBL, AL MOVCL ,02H SALAL,CL;(AL)=01000000H ADDAL,BL;(AL)=01010000H 本程序实现了什么功能? 【答】 将 AL 中的内容乘以 10。 4.3试分析下列程序完成什么功能? MOVDX,3F08H MOVAH,0A2H MOVCL,4 SHLDX,CL;(DX)=F080H MOVBL,AH SHLBL,CL;(BL)=20H SHRBL,CL;(BL)=02H ORDL,BL;(DL)=82H 【答】将 DX 中的低 4 位数据 8H 分离出来,将 AH 中的低 4 位数据 2H 分离出来,合并为 82H 存放在 DL。 4.4已知程序段如下: MOVAX,1234H MOVCL,4 ROLAX,CL DECAX MOVCX,4 MULCX 试问:(1)每条指令执行后,AX 寄存器的内容是什么?(2)每条指令执行后,CF,SF 及 ZF 的值分别是什么?(3)程序运行结束时,AX 及 DX 寄存器的值为多少? 【答】MOVAX,1234H; (AX)=1234H, CF=SF=ZF=0 MOVCL,4 ROLAX,CL; (AX)=2341H ,CF=1,SF=ZF=0 DECAX; (AX)=2340H,CF=1,SF=ZF=0 MOVCX,4; MULCX;(AX)= 8000H ,CF=ZF=0,SF=1,DX=0 4.5试分析下列程序段: ADDAX,BX JNCL2 SUBAX,BX JNCL3 JMPSHORTL5 如果 AX、BX 的内容给定如下: AXBX (1)14C6H80DCH(程序转向 L2) (2)B568H54B7H(程序转向 SHORTL5 ) 问该程序在上述情况下执行后,程序转向何处? 【答】(1) 程序转向 L2。 (2) 程序转向 SHORTL5。 4.6以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节? DATASEGMENT VAR1DW 9;2 字节 VAR2DD 10 DUP(?),2;44 字节 VAR3DB 2 DUP(?,10 DUP(?);22 字节 VAR4DB HOW ARE YOU;11 字节 DATAENDS 【答】该数据段共占 79 字节。 4.7下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。 VAR1DB 10,2;2 字节 VAR2DW 5DUP(?),0;12 字节 VAR3DB HOW ARE YOU?,$;13 字节 VAR4DD -1,1,0;2 字节 Var1Var2Var3Var4 10?HFFH 2?OFFH ?WFFH ?FFH ?A01H ?R00H ?E00H ?00H ?Y00H ?O00H 0U00H 0?00H $ 4.8编写一段程序,比较两个 5 字节的字符串 OLDS 和 NEWS,若相同,在 RESULT 置 0,否 则置 0FFH。 【答】参考程序: OLDSDB1,2,3,4,5 NEWSDB1,2,3,4,5 RESULT DB? MOVSI,OFFSETOLDS MOVDI,OFFSETNEWS MOVCX,10 CLD REPCMPSB JNZNOEQU;串不相等转 MOVAL,0 JMPOUTPT NOEQU: MOVAL,0FFH OUTPT:MOVRESULT,AL STOP:JMPSTOP 4.9编程求和 Y=A1 + A2 + . + A100 。其中 Ai 为字节变量。 【答】参考程序: DATASEGMENT TABLEDW12,3,45, YALDW? YAHDW? DATAENDS . MIANPROCFAR PUSHDS MOVAX, 0 PUSHAX MOVAX, DATA MOVDS, AX MOVDX,0 XORAX, AX;清 AX MOVBX, OFFSET TABLE MOVCX, 4 CLC LP:ADDAX, BX;求和 JNCDON INCDX CLC DON:INCBX INCBX;指向下一个数 LOOPLP;未加完,继续 MOVYAL,AX;存和 MOVYAH,DX MAINENDP CODEENDS ENDSTART 4.10内存中以 FIRST 和 SECOND 开始的单元中分别存放着两个 16 位组合的十进制(BCD 码) 数,低位在前。编程序求这两个数的组合的十进制和,并存到以 THIRD 开始的单元。 【答】参考程序:1325+9839=? DATASEGMENT FIRSTDB05H,02H,03H,01H ; SECOND DB09H,03H, 08H,09H; THIRDDB20DUP(?) DATAENDS STACKSEGMENT ST1DB 100DUP(SA) TOP1EQULENGTHST1 STACKENDS CODESEGMENT ASUMMECS:CODE,DS:DATA,SS:STACK MAINPROCFAR START: MOVAX, DAT;初始化数据段 MOVDS, AX MOVAX, STACK;初始化堆栈段 MOVSS, AX MOVAX, TOP1 MOVSP, AX MOVCX, 4;计算 4 次 MOVBX, OFFSETDAT1;取数据地址 MOVSI , OFFSETDAT2;取数据地址 MOVDI , OFFSET SUM;取结果地址 MOVAH, 00H;将暂存标志的 AH 清 0 DON1:MOVAL, BX;取第一个数 SAHF;将 AH 中的标志送标志寄存器 ADCAL, DI;与第二个数带进位加 AAA;十进制校正 LAHF;将标志寄存器内容送 AH ORAL, 30H;计算值拼成 ASCII 码 MOVDI, AL;存结果的 ASCII 码 INCBX;指向第一个数的下一位 INCSI;指向第二个数的下一位 INCDI;指向结果单元的下一位 LOOPDON1;未计算完,继续 ANDAH, 01H;将最高位的进位标志送 AH ORAH, 30H;最高位的进位位拼成 ASCII 码 MOVDI, AH;存结果的最高位 MOVAH, 02H;调用 DOS 的 02H 功能显示 MOVCX, 05H;显示数据的位数 DON2:MOVDL,DI;显示数据送 DL INT21H;显示 DECDI;显示数据所在存储单元加一 LOOPDON2;未显示完,继续 MOVAH, 4CH;返回 DOS INT21H RET MAINENDP CODEENDS ENDSTART 4.11试编程序,统计由 40000H 开始的 16K 个单元中所存放的字符“A“的个数,并将结果存 放在 DX 中。 【答】参考程序 DATASEGMENT DATA1DBDFASFAAAFDFAAFFFA COUNTEQU$-DATA1 DATAENDS STACKSEGMENT STADB100DUP(?) TOPEQULENGTHSTA STACKENDS CODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN:MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX MOVCX,COUNT MOVDX,0 LEASI,DATA1 MOVBL,A NEXT :CMPSI,BL JNZOTHER INCDX OTHER:INCSI LOOPNEXT CODEENDS ENDBEGIN 4.12统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。 【答】参考程序: BLOCKDB-1,-3,5,6,-2,0,20,10 PLUS_DDB8DUP(?);正数缓冲区 MINUS_DDB8DUP(?);负数缓冲区 PLUSDB0 MINUSDB0 MOVSI,OFFSETBLOCK MOVDI,OFFSETPLUS_D MOVBX,OFFSETMINUS_D MOVCX, 8;数据个数送 CX GOON:LODSB;AL SI TESTAX, 80H JNZJMIUS;为负数,转 INCPLUS;正数个数加一 STOSB;DI AL,传正数 JMPAGAIN JMIUS:INCMINUS;负数个数加一 XCHGBX, DI STOSB;送负数到缓冲区 XCHGBX, DI AGAIN: DECCX JNZGOON 4.13编写一个子程序将 AX 中的十六进制数,转换成 ASCII 码, 存于 ADR 开始的四个单元中。 提示:1)、AX 中的数从左到右,转换成 ASCII 码,用循环左移 ROL 和 AND 指令,把提 出的一个十六进制数置 BL 中; 2)、0 9 的 ASCII 码:30 39H,A F 的 ASCII 码:41H 46H。 ( 先把每个数加 30H, 判断是否为数字 0 9?若是 A F, 再加 07H, 得字母的 ASCII 码。 ) 【答】参考程序: DATASEGMENT ADRDB 4 DUP(?) DATAENDS CODESEGMENT MAINPROCFAR ASSUME CS:CODE,DS:DATA START:MOVAX,7EC3H;假设 ax 中存放 7ec3h LEASI,ADR MOVDL,4 AGAIN: MOVBX,AX ANDBX,000FH ADDBL,30H CMPBL,9 JGADUST JMPSTORE ADUST: ADDBL ,07H STORE: MOVSI,BL INCSI MOVCL,4 ROLAX,CL DECDL JNZAGAIN MAINENDP CODEENDS ENDSTART 4.14编写一个子程序将 AX 中的 2 进制数,转换成 10 进制 ASCII 码, 存于 ADR 开始的五个单元 中。 【答】参考程序: BINEQU 5555H;假设二进制数为 5555H DATASEGMENT ADRDB 4 DUP(?) DATAENDS STACKSEGMENT STADB100DUP(?) TOPEQULENGTHSTA STACKENDS CODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX MOVAX,BIN LEABX,ADR MOVCX,10000D CALLBINTODEC MOVCX,1000D CALLBINTODEC MOVCX,100D CALLBINTODEC MOVCX,10D CALLBINTODEC MOVCX,01D CALLBINTODEC MOVAX,04CH;返回 DOS INT21H MAINENDP ;十进制转二进制,完成一位运算,十进制存于 ax 中,结果存于 bx 所指向的地址中 BINTODECPROCNEAR MOVDX,0 DIVCX ADDAL,30H MOVBX,AL MOVAX,DX INCBX RET BINTODECENDP CODEENDS ENDSTART 4.15编写一个子程序,对 AL 中的数据进行偶校验,并将经过校验的结果放回 AL 中。 【答】参考程序: JIAOYANPROCFAR MOVAL,1001110B ORAL,AL JNPNEXT MOVAL,0 JMPDONE NEXT:MOVAL,1 DONE:MOVAH,04CH INT21H JIAOYANENDP 4.16 从 2000H 单元开始的区域,存放 100 个字节的字符串,其中有几个$符号(ASCII 码为 24), 找出第一个$符号,送 AL 中,地址送 BX。 【答】参考程序: SEARCH PROCFAR MOVDI,2000H MOVCX,100 MOVAL,24H CLD REPNZSCASB JNZSTOP DECDI MOVBX,DI MOVAL,DI STOP: RET SEARCH ENDP 4.17 用串操作指令实现:先将 100H 个数从 2170H 单元处搬到 1000H 单元处,然后从中检索等于 AL 中字符的单元,并将此单元换成空格字符。 【答】参考程序: MOVAL,24H MOVSI,2170H MOVDI,1000H MOVCX,100H CLD DO:REPMOVSB MOVDI,1000H MOVCX,100H CLD REPNZSCASB DECDI MOVDI,20H INCDI CMPCX,0 JNZDO HLT 4.18从 60H 个元素中寻找一个最大的值,并放到 AL 中,假设这 60 个元素放在 DATA1 开始的 单元中。 【答】参考程序: DATASEGMENT DATA1DB0,1,2,3,4,5,6,7,8,9 ; DATAENDS STACKSEGMENT STA DB 20 DUP (?) TOP EQU LENGTH STA STACKENDS CODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX MOVCX,10 MOVAL,0 LEABX,DATA1 AGAIN: CMPAL,BX JGENEXT;大于等于转移 MOVAL,BX NEXT :INCBX LOOPAGAIN MOVAH,4CH INT21H CODEENDS ENDSTART 4.19排序程序设计: 把表中元素按值的大小升序排列。要求显示排序前和排序后的数据。 【答】参考程序: DATASEGMENT TABDB 8095554 N=$-TAB OK DB 0DH,0AH,OK!$ DATAENDS STACKSEGMENT STADB 20 DUP(?) TOPEQULENGTHSTA STACENDS CODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK STAR:MOVAX,DATA MOVDS,AX;初始化数据段 MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX CALLARRAY DO:MOVAH,4CH INT21H;返回 DOS ARRAYPROCNEAR PUSHAX PUSHBX PUSHCX PUSHDX MOVDL,N-1;置外循环次数 MOVDH,1;设有交换标志 XORBX, BX UPPER:ORDH,DH; JZDISP;无交换,已排好序,退出 MOVDH,0;无交换 MOVCX,N-1 SUBCX,BX;CX=CX-I 内循环次数 MOVSI,0;指向表首 INNER:MOVAL,TABSI;字符送 AL INCSI;指向下个字符 CMPAL,TABSI;比较表中相邻字符 JBEDON;小于 XCHGAL,TABSI;否则交换,大字符下 MOVTABSI-1,AL ;小字符上浮 MOVDH,1;有交换,DH=1 DON:LOOPINNER;内循环结束?CX-1 INCBX;一次内循环完成,加一 DECDL;外循环次数减一 CMPDL,0 JNZUPPER;外循环次数非零,继续 DISP:MOVDX,OFFSET TAB MOVAH,09H INT21H;显示排好序的字符 POPDX POPCX POPBX POPAX RET ARRAY ENDP CODEENDS ENDSTAR 4.20编写一段程序,接收从键盘输入的 10 个数,输入回车符表示结束,然后将这些数加密后 存于 BUFF 缓冲区中。加密表为:输入数字: 0,1,2,3,4,5,6,7,8,9;密码数字:7, 5,9,1,3,6,8,0,2,4。 【答】参考程序: DATASEGMENT TABLEDB7,5,9,1,3,6,8,0,2,4;密码表 BUFFDB10DUP(?) ,$存放转换数字的缓冲区 DATAENDS STACKSEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACKENDS CODESEGMENT MOVAX,STACK MOVSS,AX MOVDI , OFFSETBUFF LEABX , TABLE MOVCX,0DH RE1:MOVAH , 1;从键盘输入 INT21H CMPAL,0DH JZDONE SUBAL,30H XLAT ADDAL,30H MOVDI , AL INCDI LOOPRE1 DONE:MOVDX , OFFSET BUFF MOVAH , 09H INT21H MOVAH,4CH INT21H CODEENDS 4.21编程序从键盘接收一个 4 位 16 进制数,转换为 10 进制数后,送显示。 【答】算法:先将输入的十六进制数保存到 BX 中,BX 中的数范围在+32767-32768 之间,先检 查 BX 中的符号位,以决定输出“+”还是“-”;若是负数,应先求补,得到原码后即可与正数 作统一处理。 转换方法为将被转换的二进制数先除; 以 10000, 商即为万位数, 再将余数除以 1000, 商为千位数,依此类推,求出百、十位数,剩的为个位数。最后,将各个数加上 30H,即成为对 应字符。 DATASEGMENT OUT_ASC_SUMdb 6 dup(?),$ DATAENDS STACKSEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACKENDS CODESEGMENT ASSUMECS :CODE,DS:DATA,SS:STACK START:MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS

温馨提示

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

评论

0/150

提交评论