微机原理与接口技术课后习题答案 下载本文

内容发布更新时间 : 2024/12/25 15:41:23星期一 下面是文章的全部内容请认真阅读。

(1)MOV AX,1200H ;(AX)=1200H (2)MOV AX,BX ;(AX)=0100H (3)MOV AX,[1200H] ;(AX)=4C2AH (4)MOV AX,[BX] ;(AX)=3412H (5)MOV AX,1100H[BX] ;(AX)=4C2AH (6)MOV AX,[BX+SI] ;(AX)=7856H (7)MOV AX,[1100H+BX+SI] ;(AX)=65B7H

4.已知(AX)=75A4H,CF=1,分别写出如下指令执行后的结果: (1)ADD AX,08FFH (2)INC AX (3)SUB AX,4455H (4)AND AX,OFFFH (5)OR AX,0101H (6)SAR AX,1 (7)ROR AX,1 (8)ADC AX,5

(1)ADD AX,08FFH ;(AX)= 7EA3H CF=0 (2)INC AX ;(AX)= 75A5H CF=1 (3)SUB AX,4455H ;(AX)= 314FH CF=0 (4)AND AX,0FFFH ;(AX)= 05A4H CF=0 (5)OR AX,0101H ;(AX)= 75A5H CF=0 (6)SAR AX,1 ;(AX)= 3AD2H CF=0 (7)ROR AX,1 ;(AX)= 3AD2H CF=0

(8)ADC AX,5 ;(AX)= 75AAH CF=0

5.给定(SS)=8000H,(SP)=2000H,(AX)=7A6CH,(DX)=3158H。执行如下程序段,画出每条指令执行后寄存器的内容和堆栈存储内容的变化情况: PUSH AX PUSH DX POP BX POP CX

PUSH AX ;(AX)=7A6CH,(SP)=1FFEH,(81FFEH)=7A6CH PUSH DX ;(DX)=3158H,(SP)=1FFCH,(81FFCH)= 3158H POP BX ;(BX)=3158H,(SP)=1FFEH POP CX ;(CX)=7A6CH,(SP)=2000H

6.试分析如下程序段执行完后,BX的内容:817FH MOV BX,1030H ;(BX)=1030H MOV CL,3 ;(CL)=3

SHL BX,CL ;(BX)=8180H DEC BX ;(BX)=817FH 四、设计题

1.现有两个双倍精度字数据1234FEDCH和11238765H,分别存放在数据段中从1000H和2000H开始的存储单元中,低位在前,高位在后。要求两数相加之后所得的和放在从1000H开始的内存单元中,设计该程序段。

;3_4_1.ASM

MOV SI,2000H ;SI指向2000H MOV DI,1000H ;DI指向1000H CLC ;CF=0

MOV CX,4 ;CX=4,循环相加4次 LL: MOV AL,[SI] ;取数 ADC AL,[DI] ;相加 MOV [DI],AL ;保存 INC SI ;SI增1 INC DI ;DI增1

LOOP LL ;CX减1,不为0,转LL MOV AX,0 ADC AX,0 MOV [DI],AX

2.设AX、BX中保存有带符号数,CX、DX中保仔无符号数,请写出实现以下功能的指令或程序段。

(1)若(CX)<(DX),则转移到NEXT1。 CMP CX,DX JB NEXT1

(2)若(AX)>(BX),则转移到NEXT2。 CMP AX,BX JG NEXT2

(3)若(CX)=0,则转移到NEXT3。 CMP CX,0 或 JCXZ NEXT3 JE NEXT3

(4)若AX中内容为负,则转移到NEXT4。 TEST AX,8000H 或 ADD AX,0 JNZ NEXT4 或 JS NEXT4 3.设堆栈寄存器(SS)=2250H。堆栈指示器(SP)=0140H,若在堆栈中存入5个字数据,则SS、SP的内容各是多少?[(SS)=2250H、(SP)=0136H] 如果又取出2个字数据,SS、SP的内容各是多少?[(SS)=2250H、(SP)=013AH]

4 思考与练习题

一、选择题

1.汇编语言程序中可执行的指令位于( )中。

A.数据段 B.堆栈段 C.代码段 D.附加数据段 2.以下内容不是标号和变量属性的是( )。

A.段属性 B.地址属性 C.偏移属性 D.类型属性

3.DOS功能调用中采用屏幕显示单个字符,其值保存在( )寄存器。 A.AL B.AH C.DL D.DH

4.DOS功能调用中,从键盘读取一个字符并回显的是( )。 A.01H B.02H C.09H D.0AH

5.循环程序设计中,要考虑的核心问题是( )。

C B C A D

A.循环的控制 B.选择循环结构 C.设置循环参数初始值 D.修改循环控制参数

6.对于宏指令和子程序,下列说法不正确的是( )。 A.宏指令不能简化目标程序

B.子程序可以简化目标程序,但执行时间长 C.子程序在执行过程中由CPU处理 D.宏指令在执行时要保护和恢复现场

D

二、填空题

1.汇编语言是一种面向_CPU指令系统_的程序设计语言,采用_指令助记符_表示操作码和操作数,用_符号地址_表示操作数地址。P82

2.汇编语言的语句可由_名字、操作符、操作数、注释_四部分组成;其中_操作符_是必须具备的。P83

3.机器指令是指_发送给CPU的命令_,在运行时由_CPU_执行;伪指令是_发送给汇编程序的命令_,在汇编过程中由_汇编程序_进行处理;宏指令是指_代表一段源程序_,通常用于_经常用到的一个程序段_场合。P87、P107

4.子程序的基本结构包括_子程序说明、现场保护及恢复、子程序体、子程序返回_等几个部分;子程序的参数传递有_寄存器、堆栈、存储器_等方法。P104、P105

5.DOS功能调用可完成对_完成对文件、设备、内存_的管理;BIOS的主要功能是_外设的控制;如系统加电自检、引导装入及对键盘、磁盘、显示器、打印机、异步串行通信口等的控制_。

6.给定如下程序段,在每条指令的右边写出指令的含义和操作功能,指出该程序段完成的功能及运行结果:

MOV AX,0 ;AX<=0 MOV BX,1 ;BX<=1 MOV CX,5 ;CX<=5

LP: ADD AX,BX ;AX<=AX+BX ADD BX,2 ;BX<=BX+2

LOOP LP ;CX<=CX-1;若CX≠0,转LP HLT ;停机

5 (1)该程序段完成的功能是_?2n?1_。

0 (2)程序运行后:(AX)=_36_;(BX)= _11_;(CX)= _0_。 三、判断题

1.伪指令是在汇编中用于管理和控制计算机相关功能的指令。 2.程序中的“$”可指向下一个所能分配存储单元的偏移地址。 3.宏指令的引入是为了增加汇编程序的功能。

4.多重循环的内循环要完整地包含在外循环中,可嵌套和并列。 5.子程序结构缩短了程序的长度,节省了程序的存储空间。

( )× ( )√ ( )√ ( )√ ( )√

四、简答题

1.完整的汇编源程序应该由哪些逻辑段组成(数据段、堆栈段、代码段)?各逻辑段的主要作用是什么(存放数据变量及其预置初值、保存中断和子程序的断点和参数传递、存放程序执行的代码)?P87

2.简述在机器上建立(为源程序起一个有意义的文件名字,并创建成文本文件)、编辑(在文本编辑软件EDIT.EXE环境下,输入和编辑源程序)、汇编(通过汇编程序ASM.EXE或MASN.EXE,将源程序会变成机器语言目标程序.OBJ)、连接(运用连接程序LINK.EXE,将目

标程序.OBJ连接生成执行程序.EXE)、运行(在DOS状态下,直接运行执行程序)、调试(运用调试程序DEBUG.EXE将执行程序跳入调试界面状态,并进行断点设置调试运行或单步调试运行操作)汇编语言源程序的过程和步骤。P94

3.什么是伪指令(发送给汇编程序的命令)?程序中经常使用的伪指令有哪些(数据定义、符号定义、段定义、过程定义、结构定义、模块定义与连接、程序计数器$和起点定义ORG)?简述其主要功能(数据定义为变量及其类型分配存储单元,并赋予初值;符合定义给一个符号重新命名;段定义指定逻辑段的名称、范围、断的定位类型、组合类型和类别;过程定义为程序段定义成过程,并赋予过程名字,以便用CALL指令调用;结构定义用于相互关联的数据定义;模块定义与连接用NAME为源程序汇编后的目标程序指定模块名,以便连接该目标模块,并生成执行程序文件;$在汇编过程中,用于存储单元分配计数器,该计数器可在指令操作数表达式中引用;ORG为数据变量和程序段指定起始位置。)?P87~P93

4.什么是宏指令(代表某功能的一段源程序)?宏指令在程序中如何被调用(在源程序中,通过宏名字(即宏指令名)进行调用)?P107

5.子程序与宏指令在程序的使用中有何共性(宏和子程序都可用来简化程序,并可使程序多次对它们调用。)及不同特点(宏操作可直接传递和接收参数,不通过堆栈或其他媒介;子程序不能直接带参数,需有传递参数时,必须通过堆栈寄存器和存储器进行。宏调用只能简化源程序的书写,并没有缩短目标代码长度;子程序调用能缩短目标程序长度。应用好操作并不会在执行目标代码时增加额外的时间开销;子程序调用由于需要保护和恢复现场和断点,因而延长目标程序的执行时间)?P109

五、设计题

1.编程实现求S=(X2+Y2)/Z的值,并将结果放人RESULT单元。 ;XT4_5_1.ASM

DATA SEGMENT ;定义数据段 X DW 15 Y DW -32

Z DW 280

RESULT DW 2 DUP(?) ;定义结果保存单元 DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA ;初始化DS MOV DS,AX

MOV AX,X ;取出被乘数X存入AX中 IMUL X ;执行X2操作

MOV CX,AX ;乘积的低位字转存至CX MOV BX,DX ;乘积的高位字转存至BX MOV AX,Y ;取出被乘数X存入AX中 IMUL Y ;执行Y操作

ADD AX, CX ;X2+Y2的低位字与Z的低位字相加 ADC DX, BX ;X+Y的高位字相加 IDIV Z ;(X+Y)/Z

MOV RESULT,AX ;商存入RESULT单元

MOV RESULT+2,DX ;余数存入RESULT+2单元 MOV AH,4CH

2

2

2

22

INT 21H ;返回DOS CODE ENDS ;代码段结束 END START ;汇编结束 2.编程序完成计算S=(A+B)/2-2(A AND B)。 ;XT4_5_2.ASM

DATA SEGMENT ;定义数据段 A DW 15 B DW -32 S DW ?

RESULT DW 2 DUP(?) ;定义结果保存单元 DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA ;初始化DS

MOV DS,AX

MOV AX,A ;取出被乘数A存入AX中 ADD AX, B ;A+B SAR AX,1 ;(A+B)/2 MOV BX,AX ;存入BX中

MOV AX,A ;取出被乘数A存入AX中 AND AX, B ;A AND B

SAL AX,1 ;(A AND B)*2

SUB BX,AX ; (A+B)/2-2(A AND B) MOV S,BX ;存入S单元 MOV AH,4CH

INT 21H ;返回DOS CODE ENDS ;代码段结束

END START ;汇编结束

3.试编程实现将内存中的若干个无符号字数据中的最大值和最小值找出来,并开辟独立的存储区域保存结果。 ;XT4_5_3.ASM DATA SEGMENT

ARR DW 123,456,67,0,34,90,89,67,0,256 CN EQU ($-ARR)/2

ZD DW 0 ;最大(数组中任何数均大于AX内容) ZX DW 0FFFFH ;最小(数组中任何数均小于BX内容) DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE

START: MOV AX,DATA

MOV DS,AX ;初始化DS

MOV SI,OFFSET ARR ;数组首地址送SI MOV CX,CN ;数组元素个数送CX

CALL QZDZXS ;调用近过程QZDZXS(求最大最小数)