2019年整理微机原理与接口技术第二版课后习题答案,龚尚福版..doc 下载本文

内容发布更新时间 : 2024/11/16 23:31:26星期一 下面是文章的全部内容请认真阅读。

256H 02H

4.4 假设程序中的数据定义如下: PARTNO DW ?

PNAME DB 16 DUP(?) COUNT DD ?

PLENTH EQU $-PARTNO

问PLENTH的值为多少?它表示什么意义? 【解】:PLENTH的值为22,它表示数据的个数。 4.5 有符号定义语句如下:

BUFF DB 1,2,3,’123’ EBUFF DB 0

L EQU EBUFF-BUFF 问L的值是多少? 【解】:PLENTH的值为6。

4.6 假设程序中的数据定义如下: LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE-LIST DB 1,7,8,3,2

⑴ 用一条MOV指令将LNAME的偏移地址放入AX。

⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。

⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。 【解】: ⑴ 用一条MOV指令将LNAME的偏移地址放入AX。 MOV AX, OFFSET LANME

⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。 MOV SI, WORD PTR CODE_LSIT

⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。 CODE_LENGHT EQU CITY-CODE_LIST

4.7 试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。 【解】:参考程序如下:

DATA_SEG SEGMENT DB1 DB 5

DATA_LIST DB -1, 0, 2, 5, 4, 5 DUP(?) COUNT DB 5 MAX DB ? MIN DB ? DATA_SEG ENDS

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG, DS:DATA_SEG START PROC FAR PUSH DS

MOV AX, 0 PUSH AX

MOV AX, DATA_SEG MOV DS, AX

LEA BX, DATA_LIST MOV CX, COUNT-1 MOV AL, [BX] MOV AH, [BX+1] LOOP1: INC BX CMP AH, AL JAE LOOP1 XCHG AH, AL LOOP2 INC BX

CMP AH, [BX] JAE LIS

XCHG AH, [BX] JMP LOP2 LIS: CMP AL , [BX] JBE LOP2

XCHG AL, [BX] LOOP2

MOV MAX, AH MOV MIN, AL RET START ENDP CODE_SEG ENDS END START 4.10 给出等值语句如下: ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2 下列表达式的值是多少? ⑴ ALPHA*100+BETA ⑶ (ALPHA+2)*BETA-2 ⑸ (ALPHA+3)*(BETA MOD GAMMA) ⑺ BETA AND 7 【解】: ⑴ ALPHA*100+BETA 100×10025=10025 ⑵ ALPHA MOD GAMMA+BETA 100/(25+2)=19 ⑶ (ALPHA+2)*BETA-2 (100+2)*25=2548 ⑷ (BETA/3) MOD 5 (25/3) MOD 5=3

⑸ (ALPHA+3)*(BETA MOD GAMMA) (100+3)*(25 MOD 2)=103 ⑹ ALPHA GE GAMMA 100 GZ GAMMA=0FFFFH

⑵ ALPHA MOD GAMMA+BETA ⑷ (BETA/3) MOD 5

⑹ ALPHA GE GAMMA ⑻ GAMMA OR 3

⑺ BETA AND 7 25 AND 7=1 ⑻ GAMMA OR 3 2 OR 3=3

4.9 对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示) TABLEA DW 10 DUP(?) TABLEB DB 10 DUP(?) TABLEC DB ’1234’ ┇ MOV AX,LENGTH TABLEA MOV BL,LENGTH TABLEB MOV CL,LENGTH TABLEC 【解】: MOV AX,LENGTH TABLEA MOV AX, OOOAH MOV BL,LENGTH TABLEB MOV BL, 0AH MOV CL,LENGTH TABLEC MOV CL, O1H

4.10 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么? FLDB DB ? TABLEA DW 20 DUP(?) TABLEB DB ‘ABCD’

⑴ MOV AX,TYPE FLDB ⑵ MOV AX,TYPE TABLEA ⑶ MOV CX,LENGTH TABLEA ⑷ MOV DX,SIZE TABLEA ⑸ MOV CX,LENGTH TABLEB 【解】:(1) MOV AX,TYPE FLDB (AX)= 1 (2) MOV AX,TYPE TABLEA (AX)= 2 (3) MOV CX,LENGTH TABLEA (CX)= 20 (4) MOV DX,SIZE TABLEA (DX)= 40 (5) MOV CX,LENGTH TABLEB (CX)= 1

8.1 解释下列概念:

中断DMA,中断源,中断向量中断向量表,不可屏蔽中断,通道FCB,中断嵌套,文件标记中断入口,可屏蔽中断 【解】:答:⑴ 当进程要求设备输入数据时,CPU把准备存放输入数据的内存起始地址以及要传送的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器。

⑵ 发出数据传输要求的进行进入等待状态。此时正在执行的CPU指令被暂时挂起。进程调度程序调度其他进程占据CPU。

⑶ 输入设备不断地窃取CPU工作周期,将数据缓冲寄存器中的数据源源不断地写入内存,直到所要求的字节全部传送完毕。

⑷ DMA控制器在传送完所有字节时,通过中断请求线发出中断信号。CPU在接收到中断信号后,转入中断处理程序进行后续处理。

⑸ 中断处理结束后,CPU返回到被中断的进程中,或切换到新的进程上下文环境中,继续执行。

中断源:引起中断的事件称为中断源。

中断向量表:每种中断都给安排一个中断类型号。80x86中断系统能处理256种类型的中断,类型号为0H~0FFH。如图8.3所示的中断源,系统时钟的中断类型为08,键盘为09,软中断中的除法错误的中断类型为0等。每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各类型中断处理程序的入口地址表。

中断嵌套:正在运行的中断处理程序,又被其他中断源中断,这种情况叫做中断嵌套。

中断就是CPU在执行当前程序时由于内外部事件引起CPU暂时停止当前正在执行的程序而转向执行请求CPU暂时停

止的内外部事件的服务程序,该程序处理完后又返回继续执行被停止的程序;中断向量是中断处理子程序的入口地址;地址范围是00000H-003FFH。

实验一 系统认识实验

一.实验目的

掌握TDN86/88教学实验系统的基本操作。

二.实验设备

TDN86/88教学实验系统一台。

三.实验内容及步骤

1. 系统认识实验(1) (1)程序的输入与修改

从3500H内存单元开始建立0-15共16个数据。

实验步骤:

a. 使用串行通讯电缆将实验系统与PC机相连。 b. 开启实验系统。

c. 在系统软件所在目录(默认为C:\\TANGDU\\W8688)下运行文件WMD86.EXE进入集成操作软件环境,打开文件菜单选

择新建,即可开始输入源程序。

d. 输入程序后,在文件菜单中选择保存程序,注意文件名的格式,扩展文件名必须为*.ASM,例:ABC.ASM。

e. 在编译菜单中选择汇编(CTRL+F2)对源程序进行汇编,若源程序没有错误生成目标文件*.OBJ,若源程序中有错误

则返回错误信息,根据错误信息对源程序进行修改后再进行汇编。

f. 汇编无误后,在编译菜单中选择链接(CTRL+F3)对汇编生成的*.OBJ目标文件进行链接,链接信息显示于屏幕上,

如没有错误,生成相应的可执行文件*.EXE。 g. 在窗口菜单中选择调试(CTRL+1)打开调试窗口,出现系统提示符“>”后选择菜单中的装入程序,选择相应的*.EXE

文件,填入程序段地址与偏移量(默认段地址0000,偏移量2000,一般不用修改),确定后PC开始将程序从磁盘装入到教学实验系统内存,提示装载完毕后使用U命令进行反汇编,检查程序是否正确装入。U命令输入格式为U0000:2000。

h. 当发现源程序输入错误或需要调整时,在调试窗口下可用A命令来修改,如修改2000句为MOV DI,3500的操作如

下:

显示信息 > 0000:2000 0000:2003 > A2000↙ MOV DI,3500↙ ↙ 键入信息

(2)运行程序

系统提供了单步运行、断点运行、连续运行等方式,具体操作如下:

a. 单步运行:在“>”提示符下输入T↙或点击菜单中的单步运行执行,每运行一条指令后会显示下一条待执行指令

并显示变化寄存器的内容,重复T↙可一步一步运行直至程序结束。

b. 连续运行:在“>”提示符下输入G=0000:2000↙(在系统默认段址CS=0000情况下可直接输入G=2000↙)可

连续运行程序,在运行过程中,可通过CTRL+BREAK或点击菜单中的停止来终止程序运行。 c. 断点运行:在程序中可用B命令定义断点,系统规定最多定义10个断点,例如:

显示信息 > [0:] [1:] > B↙ 2009↙ ↙ 键入信息

上例中定义了2009地址为断点,输入GB=0000:2000↙程序连续运行至断点时,程序中断并显示当前各寄存器内容。GB是G命令的扩充,表示含断点连续运行程序,断点仅当系统复位时清除。 (3)内存单元的内容显示:

使用D0000:3500↙可查看3500H-350FH单元中的内容是否为0-15共16个数。 (4)内存单元内容的修改:

若要修改某一单元内容,可进行如下操作,其中,“空格”键用于向待编辑单元的高地址方向移动地址,而“-”键则向反方向移动地址;用↙来确认输入,退出E命令。

显示信息 > 0000:3500 00_ 0000:3501 01_ 0000:3502 02_ 0000:3501 01_ > E3500↙ 01 space Space - ↙ 键入信息

2. 系统操作练习(2)

将内存3500H单元开始的0-15共16个数传递到3600H单元开始的数据区中。

实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)E3500↙,在3500-3510单元中分别送入00、01、02…。

(3)G=0000:2000↙,运行程序,按CTRL+BREAK中断,返回监控。 (4)D3600↙,显示结果:3600 00 01 02 …。