ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:24.92KB ,
资源ID:5954773      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5954773.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理习题4汇编语言程序设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理习题4汇编语言程序设计.docx

1、微机原理习题4汇编语言程序设计习题四 汇编语言程序设计主要内容:汇编语言程序设计。主要介绍汇编语言程序的设计方法与编程原理,重点掌握算术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS和BIOS功能调用程序、汇编语言常用伪指令。4.1 分析执行下列指令序列后的结果: 1) MOV AX,1234H MOV BX,00FFH AND AX,BX 【答】(AX)=0034H2) MOV AL,01010101B AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(A

2、L)=11011010B NOT AL 【答】(AL)=00100101B3) MOV DL,05H MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP SI,DL LOOPNE AGAIN HLT 本程序实现了什么功能?【答】在以0A001H开始的15个单元中查找05H。4) MOV AX,DSEGADDR MOV DS, AX MOV ES,AX MOV SI, OFFSET B1ADDR MOV DI,OFFSET B2ADDR MOV CX,N CLD REP MOVSB HLT 本程序实现了什么功能?【答】 将B

3、1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元 。 5) MOV AX, 0H MOV DS,AX MOV ES, AX MOV AL,05H MOV DI,0A000H MOV CX,0FH CLD AGAIN: SCASB LOOPNE AGAIN HLT 本程序实现了什么功能?【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。4.2 阅读程序:1). CLD LEA DI,0100H MOV CX, 0080H XOR AX, AX REP STOSW 本程序实现了什么功能?【答】将DS中起始地址为0100H的1

4、28个字节单元清零。2). MOV AL, 08H SAL AL,01H ;(AL)=00010000H MOV BL, AL MOV CL ,02H SAL AL,CL ;(AL)=01000000H ADD AL,BL ;(AL)=01010000H 本程序实现了什么功能? 【答】 将AL中的内容乘以10。4.3 试分析下列程序完成什么功能? MOV DX,3F08H MOV AH,0A2H MOV CL,4 SHL DX,CL ;(DX)=F080H MOV BL,AH SHL BL,CL ;(BL)=20H SHR BL,CL ;(BL)=02H OR DL,BL ;(DL)=82H

5、【答】将DX中的低4位数据8H分离出来,将AH中的低4位数据2H分离出来,合并为82H存放在DL。4.4 已知程序段如下: MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX 试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少? 【答】 MOV AX,1234H ; (AX)=1234H, CF=SF=ZF=0 MOV CL,4 ROL AX,CL ; (AX)=2341H ,CF=1,SF=ZF=0 DEC AX ; (AX)=23

6、40H, CF=1,SF=ZF=0 MOV CX,4 ; MUL CX ;(AX)= 8000H ,CF=ZF=0,SF=1,DX=04.5 试分析下列程序段: ADD AX,BX JNC L2 SUB AX,BX JNC L3 JMP SHORTL5 如果AX、BX的内容给定如下: AX BX (1)14C6H 80DCH (程序转向 L2) (2)B568H 54B7H (程序转向 SHORTL5 ) 问该程序在上述情况下执行后,程序转向何处? 【答】 (1) 程序转向 L2。(2) 程序转向 SHORTL5。4.6 以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节? D

7、ATA SEGMENT VAR1 DW 9 ;2字节 VAR2 DD 10 DUP(?),2 ;44字节 VAR3 DB 2 DUP(?,10 DUP(?) ;22字节 VAR4 DB HOW ARE YOU ;11字节 DATA ENDS【答】该数据段共占79字节。4.7 下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。 VAR1 DB 10,2 ;2字节 VAR2 DW 5DUP(?),0 ;12字节 VAR3 DB HOW ARE YOU?,$ ;13字节 VAR4 DD -1,1,0 ;2字节Var1Var2Var3Var410?FFH2?U00H?O00H?Y0

8、0H?01H?E00H?R00H?A00H?00H?W00H0O00H0H00H$4.8 编写一段程序,比较两个5字节的字符串OLDS和NEWS,若相同,在RESULT置0,否则置0FFH。【答】 参考程序: DATA SEGMENT OLDS DB 1,2,3,4,5 NEWS DB 1,2,3,4,A N = $-NEWS RESULT DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX ;初始化 MOV SI,OFFSET OLDS MOV DI,OFFSET NEWS MOV CX,N

9、 DON: MOV AL, SI CMP AL, DI JNZ NOEQU ;串不相等转 INC SI INC DI LOOP DON MOV AL,0 JMP OUTPUTNOEQU: MOV AL,0FFH OUTPUT: MOV RESULT,ALSTOP: JMP STOP ;程序陷阱CODE ENDS END START4.9 编程求和Y=A1 + A2 + . + A100 。其中Ai为字节变量。【答】 参考程序:DATA SEGMENTTABLE DW 1111H,2222H,3333H,2222HCOUNT EQU $-TABLEYAL DW ?YAH DW ?DATA END

10、S CODE SEGMENTMIAN PROC FARPUSH DSMOV AX, 0PUSH AXMOV AX, DATAMOV DS, AXMOV DX,0XOR AX, AX ;清AXMOV BX, OFFSET TABLEMOV CX, 4LP: ADD AX, BX ;求和ADC DX,0 INC BXINC BX ;指向下一个数LOOP LP ;未加完,继续MOV YAL,AX ;存和MOV YAH,DXMAIN ENDPCODE ENDSEND START4.10 内存中以FIRST和SECOND开始的单元中分别存放着两个16位组合的十进制(BCD码)数,低位在前。编程序求这两个

11、数的组合的十进制和,并存到以THIRD开始的单元。【答】 参考程序:1325+9839=?DATA SEGMENTFIRST DB 05H,02H,03H,01H ;SECOND DB 09H,03H, 08H,09H;THIRD DB 20 DUP (?)DATA ENDSSTACK SEGMENTST1 DB 100 DUP (SA)TOP1 EQU $ - ST1STACK ENDSCODE SEGMENTASUMME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARSTART: MOV AX, DAT ;初始化数据段MOV DS, AXMOV AX, STAC

12、K ;初始化堆栈段MOV SS, AXMOV AX, TOP1MOV SP, AXMOV CX, 4 ;计算4次MOV BX, OFFSET DAT1 ;取数据地址MOV SI , OFFSET DAT2 ;取数据地址MOV DI , OFFSET SUM ;取结果地址MOV AH, 00H ;将暂存标志的AH清0DON1: MOV AL, BX ;取第一个数 SAHF ;将AH中的标志送标志寄存器ADC AL, DI ;与第二个数带进位加AAA ;十进制校正LAHF ;将标志寄存器内容送AHOR AL, 30H ;计算值拼成ASCII码MOV DI, AL ;存结果的ASCII码INC BX

13、 ;指向第一个数的下一位INC SI ;指向第二个数的下一位INC DI ;指向结果单元的下一位LOOP DON1 ;未计算完,继续AND AH, 01H ;将最高位的进位标志送AHOR AH, 30H ;最高位的进位位拼成ASCII码MOV DI, AH ;存结果的最高位MOV AH, 02H ;调用DOS的02H功能显示MOV CX, 05H ;显示数据的位数DON2: MOV DL,DI ;显示数据送DLINT 21H ;显示DEC DI ;显示数据所在存储单元加一LOOP DON2 ;未显示完,继续MOV AH, 4CH ;返回DOSINT 21H RET MAIN ENDP CODE

14、 ENDS END START 4.11 试编程序,统计由40000H开始的16K个单元中所存放的字符“A“的个数,并将结果存放在DX中。【答】 参考程序DATA SEGMENT BUF DB DFASFAAAFDFAAFFFACOUNT EQU $-BUFDATA ENDSSTACK SEGMENTBUFF DW 100 DUP (?)M EQU $- STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,MMOV SP,A

15、XMOV CX,COUNTMOV DX,0LEA SI,BUFMOV AL,A CALL FindCharMOV AH,4CHINT 21H ;返回 DOSFindChar PROC NEAR PUSH DXNEXT : CMP SI,ALJNZ OTHERINC DXOTHER: INC SILOOP NEXTPOP DXRETFindChar ENDPCODE ENDSEND BEGIN4.12 统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。【答】解法一:采用串操作指令,要程序片段: BLOCK DB -1,-3,5,6,-2,0,20,10 PLUS_D DB 8 DU

16、P(?) ;正数缓冲区 MINUS_D DB 8 DUP(?) ;负数缓冲区 PLUS DB 0 MINUS DB 0 MOV SI,OFFSET BLOCK MOV DI,OFFSET PLUS_D MOV BX,OFFSET MINUS_D MOV CX, 8 ;数据个数送CX GOON: LODSB ;AL SI TEST AX, 80H JNZ JMIUS ;为负数,转 INC PLUS ;正数个数加一 STOSB ;DI AL,传正数 JMP AGAIN JMIUS: INC MINUS ;负数个数加一 XCHG BX, DI STOSB ;送负数到缓冲区 XCHG BX, DI A

17、GAIN: DEC CX JNZ GOON解法二:用比较指令CMP、转移指令JA/JNA/JB/JNB、循环指令LOOP等BLOCK DB -1,-3,5,6,-2,0,20,10 N EQU $-BLOCK PLUS_D DB 8 DUP(?) ;正数缓冲区 PLUS DB 0 MINUS_D DB 8 DUP(?) ;负数缓冲区MINUS DB 0 MOV SI,OFFSET BLOCK MOV DI,OFFSET PLUS_D MOV BX,OFFSET MINUS_D MOV CX, N ;数据个数送CXGOON: MOV AL,SI TEST AL, 80H JNZ JMIUS ;为

18、负数,转 INC PLUS ;正数个数加一 MOV DI,AL ;传正数 INC DI JMP AGAINJMIUS: INC MINUS ;负数个数加一 MOV BX,AL INC BX AGAIN: INC SI DEC CX JNZ GOON4.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

19、,再加07H,得字母的ASCII码。)【答】 参考程序:DATA SEGMENTADR DB 5 DUP(?)DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,7EC3H ;假设ax中存放7ec3hLEA SI,ADRMOV DL,4AGAIN:MOV BX,AXAND BX,000FHADD BL,30HCMP BL,9JG ADUSTJMP STOREADUST: ADD BL ,07HSTORE: MOV SI,BLINC SIMOV CL,4ROL AX,CLDEC DLJNZ AGAINMAIN

20、 ENDPCODE ENDS END START4.14 编写一个子程序将AX中的2进制数,转换成10进制ASCII码, 存于ADR开始的五个单元中。【答】算法分析:(1)一个16位2进制数,其值最大为65535。采用除10取余数方法,即可得到各个位。A)十进制数a5a4a3a2a1,除以10,余数a1为个位;商a5a4a3a2B)a5a4a3a2再除以10,余数a2为十位;C)以此类推,得到百位、千位、万位。(2)再将其加上30H则得到ASCII码,以便输出显示。(3)若数据为负数,用0减去该数,可得绝对值,再将符号位记录下来即可。参考程序:DATA SEGMENTBIN DW -1988

21、;带符号二进制数ADR DB 6 DUP(0),$ ;十进制数以ASCII码存储DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATATRAN PROC FARMOV AX,DATA MOV DS,AX MOV AX,BIN LEA DI,ADR CALL BINASCII ;十六位二进制数转换为十进制ascii码MOV AH,4CH INT 21H ;返回DOSTRAN ENDP;子程序BINASCII功能:将16位二进制数转换为ASCII码,存于ADR开始的连续6个单元,并显示;入口参数:AX=待转换的数, 预定义一个缓存区ADR,7个字节,最末字节为$字

22、符。;出口参数:DI=转换好的ASCII码首地址,显示该十进制数据BINASCII PROCPUSH BXPUSH CXPUSH DXTEST AX,8000H ;判断数据的符号JNS PLUS MINUS: MOV BYTE PTRDI,- ;将符号存储 NEG AX ;如是负数,取相反数去掉符号位 JMP GOPLUS: MOV BYTE PTRDI,+ ;将符号码存储 GO: ADD DI,5 ;DI指向个位MOV CX,5 MOV BX,10 LP: MOV DX,0DIV BX ;算法为a/10 ,余数为一个低位十进制数ADD DL,30H ;转换为ASCII码 MOV BYTE P

23、TRDI,DL ;从个位开始存储 DEC DILOOP LPMOV DX,DIMOV AH,09HINT 21H ;显示POP DXPOP CXPOP BX RETBINASCII ENDP CODE ENDSEND TRAN 4.15 编写一个子程序,对AL中的数据进行偶校验,并将经过校验的结果放回AL中。【答】参考程序:JIAOYAN PROC FARMOV AL,1001110BOR AL, ALJNP NEXTMOV AL,0JMP DONE NEXT: MOV AL,1DONE: MOV AH,04CHINT 21HJIAOYAN ENDP4.16 从2000H单元开始的区域,存放1

24、00个字节的字符串,其中有几个$符号(ASCII 码为24),找出第一个$符号,送AL中,地址送BX。【答】参考程序:SEARCH PROC FARMOV DI,2000HMOV CX,100MOV AL,24HCLDREPNZ SCASB JNZ STOPDEC DIMOV BX,DIMOV AL,DISTOP: RETSEARCH ENDP4.17 用串操作指令实现:先将100H个数从2170H单元处搬到1000H单元处,然后从中检索等于AL中字符的单元,并将此单元换成空格字符。【答】参考程序:MOV AL,24HMOV SI,2170HMOV DI,1000HMOV CX,100HCLD

25、DO: REP MOVSBMOV DI,1000HMOV CX,100HCLDREPNZ SCASBDEC DIMOV DI,20HINC DICMP CX,0JNZ DO HLT4.18 从60H个元素中寻找一个最大的值,并放到AL中,假设这60个元素放在BUF开始的单元中。【答】参考程序:DATA SEGMENT BUF DB 0,1,2,3,4,5,6,7,8,9 ;DATA ENDSSTACK SEGMENTSTA DB 20 DUP (?)TOP EQU $- STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:

26、 MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CX,10MOV AL,0LEA BX,BUFAGAIN: CMP AL,BXJGE NEXT ;大于等于转移MOV AL,BXNEXT : INC BXLOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START4.19 排序程序设计: 把表中元素按值的大小升序排列。要求显示排序前和排序后的数据。【答】参考程序:DATA SEGMENT TAB DB 8095554 N=$-TAB OK DB 0DH,0AH,OK!$ DATA ENDSSTACK SEGMENT STA DB 20 DUP(?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTAR: MOV AX,DATAMOV DS,AX ;初始化数据段MOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXCALL ARRAYDO: MOV AH,4CHINT 21H ;返回DOSARRAY PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV DL,N-1 ;置外循环次数MOV DH,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1