(4)指令“ROL DX, CL”执行之后,(DX)= 05C8H (5)指令“SAL DH, 1”执行之后,(DX)= 00B9H (6)指令“RCL DX, CL”执行之后,(DX)= 05CCH
20. 写程序,从键盘上输入一个0~65535之间的十进制无符号数,然后用二进制格式输
出这个值。例如,键盘输入“35”,显示器输出“00000000 00100011”。 答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH, 0AH, ?Input a unsigned decimal integer number please : $? MESS2 DB 0DH, 0AH, ?The number in binary is : $? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA DX, MESS1
CALL READDEC ;输入一个无符号整数 MOV BX, AX ;转存入BX LEA DX, MESS2 MOV AH, 09H INT 21H ;输出提示信息
MOV CX, 16 ;循环计数器置初值 AGAIN: SHL BX, 1 ;向左外移一位,进入CF MOV DL, 30H ADC DL, 0 ;形成一位二进制数字的ASCII代码 MOV AH, 2 INT 21H ;输出一个二进制数字 LOOP AGAIN ;循环16次 CALL CRLF MOV AX, 4C00H INT 21H CODE ENDS END START
21. 无符号数变量X用DD定义,编写程序,用十六进制格式输出变量X的值。 答: DATA SEGEMNT X DD 36895471 ;一个32B长整数 MESS DB 0DH, 0AH, ?The X in hexdecimal is : $? HEXTAB DB ?0123456789ABCDEF? DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA START: MOV AX, DATA
MOV DS, AX LEA DX, MESS MOV AH, 09H INT 21H ;输出前导信息
MOV SI, word ptr X+2 ;将X高16位存入SI
MOV CX, 4 ;循环计数器置初值 LEA BX, HEXTAB ;换码表首地址装入BX AGAIN1:ROL SI, 4 ;把最高4位移到最低4位上 MOV AX, SI ;低8位转入AL AND AX, 000FH ;清除高4位
XLAT ;转换成十六进制数字的ASCII代码 MOV DL, AL MOV AH, 2 INT 21H ;输出一个十六进制数字
LOOP AGAIN1 ;循环8次
MOV SI, word ptr X ;将X低16位存入SI
MOV CX, 4 ;循环计数器置初值 AGAIN2:ROL SI, 4 ;把最高4位移到最低4位上 MOV AX, SI ;低8位转入AL AND AX, 000FH ;清除高4位
XLAT ;转换成十六进制数字的ASCII代码 MOV DL, AL MOV AH, 2 INT 21H ;输出一个十六进制数字
LOOP AGAIN2 ;循环8次 MOV AX, 4C00H INT 21H CODE ENDS END START
22. 编写指令序列,把AX中的16b二进制分为4组,每组4b,分别置入AL,BL,CL,
DL中。 答: MOV DX, AX ;最低4位直接进入DX
MOV CX, 4
ROL AX, CL ;最高4位移入最低4位 PUSH AX ;压入堆栈保存(准备送入AL) ROL AX, CL ;次高4位移入最低4位 MOV BX, AX ;送入BL ROL AX, CL ;第3组4位移入最低4位 MOV CX, AX ;送入CL POP AX ;从堆栈中弹出原最高4位 AND AX, 000FH ;清除高12位 AND BX, 000FH ;清除高12位 AND CX, 000FH ;清除高12位 AND DX, 000FH ;清除高12位
习 题 四
13. 编写程序,求10元素字数组LIST中绝对值最小的数,存入MIN单元。
答: DATA SEGEMNT LIST DW -56, +12, 88, -126, -5, 16, 32, -99, 72, -18 MIN DW ? MINABS DW ?
DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AX, LIST MOV MIN, AX ;将数组第一个元素假设为绝对值最小的数
MOV MINABS, 32767 ;最小的绝对值假设为32767 LEA SI, LIST MOV CX, 10
AGAIN: MOV AX, [SI]
CMP AX, 0 JGE SKIP1 NEG AX ;求绝对值
SKIP1: CMP AX, MINABS ;绝对值与假设的最小绝对值比较 JGE SKIP2 ;假设的绝对值较小,跳过 MOV MINABS, AX ;保存新的最小绝对值
MOV AX, [SI] ;取出新的绝对值最小的数 MOV MIN, AX ;保留新的绝对值最小的数
SKIP2: ADD SI, 2 LOOP AGAIN
MOV AX, 4C00H
INT 21H CODE ENDS END START
说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来自LIST数组。 14.
15. 一个有符号字数组以0为结束标志,求这个数组的:最大值、最小值、平均值。
答: DATA SEGEMNT LIST DW -56, +12, 88, -126, -5, 16, 32, -99, 72, -18, 0 MIN DW ? MAX DW ? AVG DW ?
DATA ENDS
CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV MIN, 32767 ;将32767假设为最小的数
MOV MAX, -32768 ;将-32768假设为最大的数 MOV AVG, 0 ;AVG用作累加器,清零 LEA SI, LIST MOV CX, 0
AGAIN: MOV AX, [SI]
CMP AX, 0 JZ DONE ;找到零元素,转DONE结束处理 INC CX ;记录非零元素个数 ADD AVG, AX ;累加 CMP AX, MIN JGE SKIP1 MOV MIN. AX ;比预设最小值还小,保留
SKIP1: CMP AX, MAX
JLE SKIP2
MOV MAX, AX ;比预设最大值还大,保留 SKIP2: ADD SI, 2 JMP AGAIN DONE: JCXZ NULL ;元素个数为零,转NULL处理 MOV AX, AVG CWD IDIV CX MOV AVG, AX ;计算平均值 JMP EXIT NULL: MOV MIN, 0 ;元素个数为0,将“最大值”、“最小值” MOV MAX, 0 ;“平均值”清零 MOV AVG, 0 EXIT: MOV AX, 4C00H INT 21H CODE ENDS END START
习 题 五
1. 接口电路与外部设备之间传送的信号有哪几种?传输方向怎样?
数据信号:对于输入设备,数据信号从外设通过接口送往总线,对于输出设备,数据信号从总线通过接口发往外部设备。
状态信号:状态信号表明外部设备当前的工作状态,用来协调CPU与外部设备之间的
操作。状态信号总是从外部设备通过接口发往总线。
控制信号 :控制信号是CPU向外设发出的命令,它指定设备的工作方式,启动或停止设备。控制信号从CPU通过接口发往外部设备。 2. 接口电路有哪些功能?哪些功能是必需的?
接口电路可以具备:设备选择功能、信息传输功能、数据格式转换功能、联络功能、中断管理功能、复位功能、可编程功能和错误检测等功能。其中设备选择功能和信息传输功能是每一个接口电路所必备的。其他的功能是否需要则由设备的特点和工作方式决定。 3. I/O端口的编址有哪几种方法?各有什么利弊?80X86系列CPU采用哪种方法?
I/O端口的编址有两种不同的方式。
I/O端口与内存统一编址:把内存的一部分地址分配给I/O端口,一个8位端口占用一个内存单元地址。已经用于I/O端口的地址,存储器不能再使用。
I/O端口与内存统一编址后,访问内存储器单元和I/O端口使用相同的指令,这有助于降低CPU电路的复杂性,并给使用者提供方便。但是,I/O端口占用内存地址,相对减少了内存可用范围。而且,由于难以区分访问内存和I/O的指令,降低了程序的可读性和可维护性。
I/O端口与内存独立编址:这种编址方法中,内存储器和I/O端口各自有自己独立的地址空间。访问I/O端口需要专门的I/O指令。
80x86 CPU采用I/O端口独立编址方式。
4. 按照传输信号的种类,I/O端口有几种?它们信号的传输方向怎样?
按照传输信号的种类,I/O端口有三种:
数据端口:数据信息从端口输入CPU(输入设备接口),或者从CPU写入端口(输出设备接口);
状态端口:外设状态信息从端口输入CPU; 控制端口:命令信息从CPU写入端口。 5.
6. 外部设备数据传送有哪几种控制方式?从外部设备的角度,比较不同方式对外部设备的响应速度。
外部设备数据传送有以下四种控制方式。
直接传送方式(也称为无条件传送方式、同步传送方式):这种情况下,外部端口完全被动地等待CPU的访问,没有确定的响应速度,响应时间取决于CPU忙碌的程度以及程序对外部设备控制采取的策略。
查询方式:如果CPU在某一时刻只对一个外设采用查询方式进行数据传输,CPU的响应延迟约为3~10个指令周期。响应速度快于中断方式,慢于DMA方式。
中断方式:CPU的响应延迟平均为几十个指令周期,慢于查询方式,但是这种方式可以同时管理多个外部设备。
DMA方式:外部端口的传输请求由DMA控制器响应,由于DMAC是一个专用于传输控制的电路,任务单一,不发生DMA传输竞争时,响应延迟仅为1~2个DMAC使用的时钟周期,远快于中断方式和查询方式。 7.
8. 比较程序中断方式和查询方式的区别,根据比较,指出中断工作方式的优缺点。
中断方式:外部设备工作完成后,通过“中断请求”信号“主动”向CPU“报告”。 查询方式:外部设备工作完成后,状态信号储存在接口电路内,被动地等待CPU来读取。
根据上述比较,可以得到中断工作方式的如下特点: