微机原理习题4答案_第1页
微机原理习题4答案_第2页
微机原理习题4答案_第3页
微机原理习题4答案_第4页
微机原理习题4答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、习题4:请编写完整汇编程序:1. 内存中以BUF单元开始存放8个16位二进制数,试编程将8个数倒序后存放于BUF开始的单元,试编程;(提示:采用堆栈实现)DATA SEGMENTORG 0000HBUF DW 1111H,2222H,3333H,4444H,5555H,6666H,7777H,8888HCOUNT EQU ($-BUF)/2DATA ENDSSTACK1 SEGMENT STACK DW 256 DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK1,DS:DATASTART: MOV AX,DATA MOV DS,AX M

2、OV AX,STACK1 MOV SS,AX LEA SI,BUF MOV CX,COUNTLOP1: MOVAX,SI PUSH AX INC SI INC SI LOOP LOP1 LEA SI,BUF MOV CX,COUNTLOP2: POP AXMOVSI,AX INC SI INC SI LOOP LOP2CODE ENDS END START2. 将8个16位无符号数相加,结果保存在32位无符号数SUM中;DATA SEGMENTBUF DW 1111H,2222H,3333H,4444H,5555H,6666H,7777H,8888HCOUNT EQU ($-BUF)/2SUM

3、 DD 0DATA ENDSSTACK1 SEGMENT STACK DW 100 DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CX,COUNT MOV DX,0000HLOP: MOV AX,BX ADD WORD PTR SUM,AX ADC WORD PTR SUM+2,DX INC BX INC BX LOOP LOP MOV AX,4C00H INT 21HCODE ENDS END START3. 以十进制形式在计算

4、机屏幕上显示内存中的一个8位有符号数,例如:若内存单元中存放的数据为7FH,则在屏幕上显示+127,若内存单元存放的数据为0FFH,则应在屏幕上显示-1;DATA SEGMENT VARDB0FFH STR1 DB 'THE RESULT IS: $'DATA ENDSSS_SEG SEGMENT STACKDW100 DUP(0)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART:MOVAX, DATAMOVDS, AXLEADX,STR1MOVAH,09HINT21HMOVDL, '+

5、9;CMPVAR, 0 JGE NEXTMOVDL, '-'NEGVARNEXT:MOVAH,02HINT21HMOVAL, VARMOVBL, 10MOV CL,0LOP1: AND AH,0 DIV BL PUSH AX INC CL CMP AL,0 JNZ LOP1LOP2: POPAX MOV DL,AH ADD DL,30H MOV AH,2 INT 21H LOOP LOP2 MOV AX, 4C00HINT21HCODE ENDSEND START4. 从键盘输入一个4位十进制数,然后以16进制形式显示在屏幕上,试编程;例如:输入1 0 2 4 在屏幕上应该显示

6、0400HDATA SEGMENT STR1 DB 'INPUT DATA: $'BUFDB20DB4DB4 DUP(?) STR2 DB 0AH,0DH,'THE RESULT IS: ','$'DATA ENDSSS_SEG SEGMENT STACKDB100 DUP(0)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART:MOVAX, DATAMOVDS, AXLEADX,STR1MOVAH,09HINT21HMOVAH,0AHLEADX,BUFINT21HMOV

7、CX,03HLEASI,BUF+2ANDBX,0HMOVDL,0AHLOP1:MOVAL,SISUBAL,30HPUSHCXLOP2:MULDL LOOP LOP2POPCXADDBX,AXINCSILOOP LOP1ANDCH,00HMOVCL,SISUBCL,30HADDBX,CXLEADX,STR2MOVAH,09HINT21HMOVAX,BX AND CH,00HMOVCL,04HMOVDH,04HMOVDL,00HAAA1:ANDAX,000FHPUSHAXDECDHINCDLSHRBX,CLMOVAX,BXCMPDH,0JAAAA1 MOV CL,DLBBB:POPDX CMPDL

8、,09HJBNEXTADDDL,07H NEXT: ADD DL,30H MOV AH,2 INT 21HLOOPBBBMOVDL,'H'MOVAH,02HINT21H MOVAX,4C00HINT21HCODEENDSENDSTART5. 数据段中存放有一个无符号字数据VAR,将其转换成非压缩格式的BCD码,存于BUF开始的单元中(高位在前);例如:若VAR为0800H,则转换后(BUF) = 20H(BUF+1) = 48HDATA SEGMENT PARAVARDW0800HBUFDB2 DUP(0)DATA ENDSSS_SEG SEGMENT STACKDW100 D

9、UP(0)SS_SEG ENDSCODE SEGMENT PARAASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART:MOVAX, DATAMOVDS, AXMOVCX, 16MAIN1:SHLVAR, 1MOVBX, 4PUSHCXMOVCX, 5MAIN2:MOVAL, BUFBXADCAL, ALAAAMOVBUFBX, ALDECBXLOOPMAIN2POPCXLOOPMAIN1EXIT:MOVAX, 4C00HINT21HCODE ENDSEND START6. 内存中以str1和str2开始分别存放了两个字符串,结束符为NULL(ASCII码为0),将s

10、tr2连接到str1后,形成1个字符串,并将连接后的字符串str1输出到屏幕上;DATA SEGMENT STR1DB'GOOD MORNING,',00HSTRDB50 DUP(0)STR2DB'Mr WANG!',0AH,0DH,00HDATA ENDSSS_SEG SEGMENT STACKDW100 DUP(0)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART: MOV AX,DATAMOVDS,AX LEA SI,STR1MOVAL,SICMPAL,00HJEJP1JP2:I

11、NCSIMOVAL,SICMPAL,00HJAJP2JP1:MOVCX,01HLEABX,STR2MOVAH,BXMOVBX,AHCMPAH,00HJEJP3MOVSI,AHJP4:INCSIINCBXINCCXMOVAH,BXMOVSI,AHCMPAH,00HJAJP4JP3: INC SI MOV SI,BYTE PTR '$'LEADX,STR1MOVAH,09HINT21HMOVAX,4C00HINT21HCODEENDSENDSTART7. 统计10个有符号字节数中,大于0、小于0、等于0的个数,分别存放在NUM1、NUM2、NUM3三个变量中,并找出最大值、最小值分

12、别存放到MAX、MIN变量中,再求10个数的和,将结果存放到16位有符号数SUM中。DATA SEGMENT NUMDB0F0H,03H,0B4H,0AH,0AAH,00H,80H,7FH,99H,21HCOUNTEQU($-NUM)ORG0010HNUM1DB0NUM2DB0NUM3DB0MINDB0MAXDB0SUMDW0DATA ENDSSS_SEG SEGMENT STACKDW100 DUP(0)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART: MOV AX,DATAMOVDS,AXMOVSS,AXLEA

13、SI,NUMMOVCX,COUNTMOVBX,0000HMOVDX,0000HLOP:MOVAL,SIINCSICMPAL,0JGDAJLXIAOJEDENGDA:INCBHJMPAAA1XIAO:INCBLJMPAAA1DENG:INCDHAAA1:LOOPLOPLEASI,NUM1MOVSI,BHLEASI,NUM2MOVSI,BLLEASI,NUM3MOVSI,DHMOVCX,COUNT-1MAIN1: LEA BX,NUMPUSHCXMAIN2: MOV AL,BX INC BX CMP AL,BX JLE NEXT XCHG AL,BX MOV BX-1,ALNEXT:LOOPMAI

14、N2POPCXLOOPMAIN1LEASI,MIN MOV AL,NUM MOV SI,ALLEASI,MAX MOV BL,NUM+9 MOV SI,BL MOV SI,OFFSETNUM MOVCX,COUNT MOVAX,0LOP2: AND BX,0MOVBL,SIADDAX,BXINC SI LOOP LOP2LEASI,SUMMOVSI,AXMOVAX,4C00HINT21HCODEENDSENDSTART8 若程序的数据段定义如下,写出各指令语句独立执行后的结果。DSEG SEGMENTDATA1 DB 10H, 20H, 30HDATA2 DW 10 DUP (?)String

15、 DB 123DSEG ENDS(1) MOV AL, DATA1 10H->AL(2) MOV BX, offset DATA2DATA2代表的首地址赋给BX(3) LEA SI, StringString代表的首地址赋给BXADD DI,SISI+DI->DI9 假设数据项定义如下:DATA1 DB HELLO!GOOD MORNINGDATA2 DB 20 DUP(?)用串操作指令编写程序段,使其分别完成一下功能。(1) 从左到右将DATA1中的字符串传送到DATA2中;LEASI,DATA1LEADI,DATA2MOVCX,20CLDREPMOVSB(2) 传送完后,比较D

16、ATA1和DATA2中的内容是否相同;LEASI,DATA1LEADI,DATA2MOVCX,20CLDREPECMPSB(3) 把DATA1中的第3个字节和第四个字节装入AX;LEASI,DATA1ADDSI,2LODSW(4) 将AX的内容存入DATA2+5开始的字节单元中;LEADI,DATA2ADDDI,5STOSW10 执行下列指令后,AX寄存器中的内容是多少?TABLE DW 10,20,30,40,50ENTRY DW 3MOV BX, Offset TABLEADD BX, ENTRYMOV AX,BXAX=1400H存储器11 图示以下数据段在存储器中的存放形式;10H34H07H09H42H00H42H00H48H45H4CH4CH4FH21HCDHABH00H00HDATA SEGMENT DATA1DB 10H, 34H, 07H, 09H DATA2DW 2 DUP(42H) DATA3 DB HELLO!DATA4 EQU 12DATA5 DD ABCDHDATA ENDS12 阅读下边的程序段,试说明它实

温馨提示

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

评论

0/150

提交评论