微机原理与接口技术复习题级11.docx
- 文档编号:5789488
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:27
- 大小:23.66KB
微机原理与接口技术复习题级11.docx
《微机原理与接口技术复习题级11.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术复习题级11.docx(27页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术复习题级11
《微机原理与接口技术》复习题
一、定义一个带符号的字节数组,数组的长度(元素个数)至少为10,然后求该数组各元素的和,结果保存到字类型的变量中。
DATASEGMENT
ARRAYDB23,24,26,72,92,20,29,28,25,26,32
COUNTEQU$-ARRAY
RESULTDW?
DATAENDS
CODESEGMENT
ASSUMEAS:
DATA,DADATA
MAIN:
MOVAX,DATA
MOVDS,AX
LEABX,ARRAY
MOVCX,COUNT
MOVAX,0
GOON:
ADDAL,[BX]
ADCAH,0
INCBX
LOOPGOON
MOVRESULT,AX
MOVAH,4CH
INT21H
CODEENDS
ENDMAIN
二、把一个字节类型的无符号数乘以20,乘积保存到字类型的变量中,要求采用加法和移位指令完成该乘法运算,不能使用乘法指令。
DATASEGMENT
C1DB2
RESULTDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOV AX,DATA
MOV DS,AX
MOV AL,C1
MOV AH,0
SHL AX,1
SHL AX,1
MOV BX,AX
SHL AX,1
SHL AX,1
ADD AX,BX
MOV RESULT,AX
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
三、对字节变量X1和X2分别进行初始化,然后求它们的无符号乘积和带符号乘积,并将运算结果分别存入字变量M1和M2中。
DATASEGMENT
X1DB-10
X2DB20
M1DW?
M2DW?
DATAENDS
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVAL,X1
MOVAH,0
MULX2
MOVM1,AX
MOVAL,X1
MOVAH,0
IMULX2
MOVM2,AX
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
四、定义一个带符号的字节数组,数组的长度(元素个数)至少为10,然后从中找出最小元素和最大元素,并把它们分别保存到字节变量X1和X2中。
DATASEGMENT
ARRAYDW-94,175,22,214,400
DW1,500,300,-33,20,3
COUNTEQU($-ARRAY)/2
X1DW?
;最小元素
X2DW?
;最大元素
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
LEABX,ARRAY
MOVAX,[BX]
MOVDX,[BX]
MOVCX,COUNT
MAX:
CMPDX,[BX]
JGEMIN;大于或等于转移
MOVDX,[BX]
MIN:
CMPAX,[BX]
JLESKIP;小于或等于转移
MOVAX,[BX]
SKIP:
INCBX
INCBX
LOOPMAX
MOVX1,AX
MOVX2,DX
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
五、定义两个字节类型的数组,统计既属于第一个数组又属于第二个数组的元素个数,统计结果保存到变量RESULT中。
DATA SEGMENT
ARRY1 DB 1,2,3,4,5,6,7,8,9,10
C1 EQU $-ARRY1
ARRY2 DB 0,2,3,7,6,8,9,4,2,22
C2 EQU $-ARRY2
RESULT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,C1
LEA SI,ARRY1
GOON:
LEA BX,ARRY2
MOV DX,C2
MOV AL,[SI]
CALL COUNTER
INC SI
LOOP GOON
MOV AH,4CH
INT 21H
COUNTER PROC
NEXT:
DEC DX
CMP AL,[BX]
JE ADDONE
INC BX
CMP DX,0
JNE NEXT
JMP EXIT
ADDONE:
INC RESULT
EXIT:
RET
COUNTER ENDP
CODE ENDS
ENDSTART
六、对无符号字变量X1和X2分别进行初始化,然后采用辗转相除法求它们的最大公约数,结果保存到字变量RESULT中。
DATASEGMENT
X1DW60
X2DW75
RESULTDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVAX,X1
MOVBX,X2
CMPAX,BX;比较前者是否大于后者以便相除
JAEGOON;无符号,大于或等于转移
XCHGAX,BX;前者小于后者则交换
GOON:
MOVDX,0
DIVBX;对于(DX,AX)/SRC,结果保留在(余数)DX和(商)AX中
MOVAX,BX;将除数放在被除数中
MOVBX,DX;将余数放在除数中,完成辗转
CMPDX,0;对余数位置进行判断,如果等于0则结束运算
JNEGOON
MOVRESULTAX
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
七、对字节变量VALUE进行初始化,然后从一个给定的字节数组中查找与该变量等值的元素,数组的长度保存在变量LEN中。
如果找到,则把该元素从数组中删除,并且修改数组的长度;如果未找到,则不做任何处理。
DATASEGMENT
ARYDB1,2,3,4,5,6,7,8,9,10
LENEQU$-ARY
VALUEDB10
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,VALUE
LEADI,ARY
MOVCX,LEN
CLD
REPNESCASB
JNESTOP
CMPCX,0
JESKIP
MOVSI,DI
DECDI
REPMOVSB
SKIP:
DECLEN
STOP:
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
八、定义一个带符号的字节数组,数组的长度(元素个数)至少为10。
然后将该数组中的正、负数分开,正数和零存入BUF1缓冲区,负数存入BUF2缓冲区。
DATASEGMENT
ARRAYDB1,2,3,-1,-2,-3,0,4,5,6
COUNTEQU$-ARRY1
BUF1DB5DUP(?
)
BUF2DB5DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,ARRAY
MOVCX,COUNT;将长度放到CX中
GOON:
MOVAL,[SI]
MOVAH,0
MAX:
CMPAX,0
JLEMIN
MOVBUF1,AL
JMPSKIP
MIN:
MOVBUF2,AL
SKIP:
INCSI
LOOPGOON
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
九、按从小到大的顺序以十进制形式在屏幕上显示1~10的平方,相邻两个数之间以空格分隔。
DATASEGMENT
ASCDB5DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAIN:
MOVAX,DATA
MOVDS,AX
MOVBL,1
GOON:
MOVAL,BL
MULAL;获得1,并自乘
CALLOUTPUT
CMPAX,100
JAESTOP
INCBL
JMPGOON
STOP:
MOVAH,4CH
INT21H
OUTPUTPROC
PUSHAX
PUSHBX;将BX送入堆栈保存
LEASI,ASC+4;将指针指向保存十进制各个位的数组的最末尾
MOVBX,10
MOVCX,0
NEXT:
MOVDX,0;初始化DX,用作记录每次的余数
DIVBX;AX除以BX,即获得商放在AX中,DX放余数
ADDDL,48;将余数,即最末尾的数直接转换为ASC码对应的数
MOV[SI],DL
DECSI
INCCX
CMPAX,0
JNENEXT
SHOW:
INCSI
MOVDL,[SI]
MOVAH,2
INT21H
LOOPSHOW
MOVDL,’空格’
MOVAH,2
INT21H
POPBX
POPAX
RET
OUTPUTENDP
CODEENDS
ENDMAIN
十、按从小到大的顺序以十进制形式在屏幕上显示Fibonacci数列100以内各项的值,相邻两项之间以空格分隔。
其中第1项Fib
(1)=1,第2项Fib
(2)=1,以后各项按下列公式计算:
Fib(n)=Fib(n-2)+Fib(n-1) n>2
十一、从键盘输入一个字符串,然后将其中所有的小写字母转换成对应的大写字母,并在屏幕上显示转换后的字符串。
DATASEGMENT
STRINGDB100
DB?
DB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
LEADX,STRING;将字符串的偏移地址放入dx
MOVAH0AH;调用10号功能输入一个字符串
INT21H
MOVCL,STRING+1;将字符串的长度放入cl
MOVCH,0
LEASI,STRING+2;将指针指向字符串的内容
GOON:
MOVAL,[SI];一个一个地读取内容
CMPAL,’a’
JBSKIP;小于a
CMPAL,’z’
JASKIP;大于z
SUBAL,32;大于a且小于z的统一减32,即变大写
SKIP:
MOVDL,AL;将前面没有在a,z范围的普通字符放入dl准备输出
MOVAH,02H;调用2号功能输出
INT21H
INCSI;指针下移准备下一个
LOOPGOON
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
十二、从键盘输入一个字符串,统计其中大写字母、小写字母和数字字符的个数,并将统计结果分别存入变量X1、X2和X3中。
DATA SEGMENT
STR DB 100;最多可输入的字符数
DB?
;实际输入的字符数
DB100 DUP(?
); 存放输入的字符数
X1 DB 0;大写字母
X2,DB 0 ;小写字母
X3 DB 0 ;数字字符
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEA DX,STR ;输入一个字符串
MOV AH,0AH
INT 21H
MOV CL,STR+1
MOVCH,0
LEASI,STR+2
GOON:
CMP [SI],’A’ ;65与'A'做比较
JAE BIGORSMALL ;无符号,大于或等于
INC X3
BIGORSMALL:
CMP SI,‘Z’ ;90
JBE ADDBIG ;无符号,小于或等于转移
CMP SI,’a’ ;97
JAE SMALL
INC X3
JMP STOP
SMALL:
CMP SI,’z’ ;122
JBE ADDSMALL
INC X3
JMP STOP
ADDBIG:
INC X1
JMP STOP
ADDSMALL:
INC X2
JMP STOP
STOP:
INCSI
LOOP GOON
MOV AH,4CH
INT 21H
CODE ENDS
END START
十三、用某个十进制数对字变量VALUE进行初始化,然后将其值转换为十六进制数并在屏幕上输出。
DATASEGMENT
VALUEDW12345
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVBX,VALUE
MOVCX,4
GOON:
ROLBX,1
ROLBX,1
ROLBX,1
ROLBX,1
MOVDX,BX;将数字取出处理,原数据不变
ANDDL,0FH;单独抽取最低那位
CMPDL,9;和9比较看看是要转字母还是直接输出数字
JBESKIP;小于或等于9,即纯数字直接转ASC码
ADDDL,7;7是ASC数字和字母之间的差
SKIP:
ADDDL,30H;转ASC码
MOVAH,2
INT21H
LOOPGOON
ADDDL,”H”;转ASC码
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
十四、从键盘输入一个不超过4位的十进制数,把该数的值保存到变量VALUE中。
要求程序能对非法输入(指按下了非数字键)进行检测,并在屏幕上显示该十进制数,当用户按回车键时输入结束。
DATASEGMENT
VALUEDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVBX,0;用作累加
MOVCX,4;循环计数
NEXT:
MOVAH,7;键盘输入字符无回显
INT21H
CMPAL,ODH;和回车做比较,如果相同则表示输入结束
JESTOP
CMPAL,’0’;和0做比较,小于则不输入
JBNEXT
CMPAL,’9’;和9做比较,大于则不输入
JANEXT
MOVDL,AL;纯数字直接输出
MOVAH,2
INT21H
ANDAL,0FH
CALLMUL10
MOVAH,0
ADDBX,AX;累加
LOOPNEXT
STOP:
MOVVALUE,BX;将数值赋给VALUE
MOVAH,4CH
INT21H
MUL10PROC
SALBX,1;乘2
MOVDX,BX
SALBX,1;乘4
SALBX,1;乘8
ADDBX,DX;扩大十倍
RET
MUL10ENDP
CODEENDS
ENDBEGIN
十五、某微型机的中断系统由3片8259A组成,以级联方式进行连接。
其中作为主片的8259A的端口地址为20H和21H,工作方式为特殊完全嵌套、电平触发、缓冲及中断非自动结束,中断类型号为48~4FH。
第一个从片8259A的端口地址为40H和41H,工作方式为完全嵌套、电平触发、缓冲及中断非自动结束,中断类型号为60~67H,中断请求输出端INT与主片的IR3连接在一起;第二个从片8259A的端口地址为42H和43H,工作方式为完全嵌套、电平触发、缓冲及中断非自动结束,中断类型号为68~6FH,中断请求输出端INT与主片的IR5连接在一起。
请编写程序分别对上述三个8259A芯片进行初始化。
;主片的初始化
MOVDX,20H
MOVAL,00011001B;ICW1电平触发、缓冲及中断非自动结束
OUTDX,AL
MOVDX,21H
MOVAL,48H;ICW2中断类型号
OUTDX,AL
MOVAL,00010100B;ICW3
OUTDX,AL
MOVAL,00011101B;ICW4
OUTDX,AL
;第一个从片
MOVDX,40H
MOVAL,00011001B;ICW1
OUTDX,AL
MOVDX,41H
MOVAL,60H;ICW2
OUTDX,AL
MOVAL,00000011B;ICW3与主片的IR3连接在一起
OUTDX,AL
MOVAL,00001001B;ICW4
OUTDX,AL
;第二个从片
MOVDX,42H
MOVAL,00011001B;ICW1
OUTDX,AL
MOVDX,43H
MOVAL,68H;ICW2
OUTDX,AL
MOVAL,00000101B;ICW3
OUTDX,AL
MOVAL,00001001B;ICW4
OUTDX,AL
十六、8255A以查询方式向打印机输出数据。
假设8255A的端口A工作在方式1,数据输出,打印机的BUSY信号连接到PC4,三个端口以及控制寄存器的地址分别为60~63H。
写出打印机驱动程序,将内存缓冲区BUFFER中的2000个字节的数据发送到打印机输出,请参考教材第253页的例7.6。
DATASEGMENT
BUFFERDB2000HDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVDX,63H;获得操作控制口地址
MOVAL,10101000B;编写控制字
OUTDX,AL;将控制字写入控制口
LEA BX,BUFFER
MOVCX,2000;将要传送的字数放入CX
L1:
MOVDX,62H;获得C端口的地址
INAL,DX;从C端口调回是否忙的值
TESTAL,00010000B;测试是否正忙
JNZL1;JNZ为判断ZF是否为0
MOVAL,[BX];将即将传送的字的地址放
MOVDX,60H;获得端口A,即输出端的地址
OUTDX,AL;将数据输出
INCBX;修改地址
LOOPL1
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
十七、8255A以中断方式向打印机输出数据。
假设8255A的端口A工作在方式1,数据输出,其中断请求信号通过PC3连接到8259A的IR2,端口B和端口C不用,三个端口以及控制寄存器的地址为60~63H;8259A的工作方式为电平触发、单片、完全嵌套、非缓冲且中断非自动结束,中断类型号为08~0FH,端口地址为20~21H。
要求写出主程序和中断服务程序,在主程序中分别对8259A、8255A和中断向量表初始化,在中断服务程序中向打印机输出字符,请参考老师在上课时讲解的例题。
DATASEGMENT
BUFFERDB2000DUP(?
)
COUNTDW2000
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAIN:
CLI; CLI(CLEAR INTERRUPT) 中断标志置0指令使 IF = 0.
MOVDX,20H
MOVAL,00011011B;ICW1
OUTDX,AL
MOVDX,21H
MOVAL,08H;ICW2
OUTDX,AL
MOVAL,00000001B;ICW4,这里是单片不写ICW3
OUTDX,AL
INAL,DX
ANDAL,11111011B;设置8259A的中断屏蔽字
OUTDX,AL
MOVDX,63H;获得操作控制口地址,控制器端口是数字最大的60-63H
MOVAL,10100000B;8255A编写控制字
OUTDX,AL;将控制字写入控制口
MOVAL,00000111B;PC3,查格式表写出
OUTDX,AL
MOVDX,SEGPRINT;以下都是中断向量表初始化
MOVDS,DX
MOVDX,OFFSETPRINT
MOVAL,0AH;设置中断号 AL=中断号
MOVAH,25H;设置中断向量
INT21H;中断向量表初始化到这
MOVAX,DATA
MOVDS,AX
LEABX,BUFFER
STI;STI(SET INTERRUPT) 中断标志置1指令使 IF = 1;
WAIT0:
CMPCOUNT,0;等待中断
JNEWAIT0
MOVAH,4CH
INT21H
PRINTPROC
MOVAL,[BX];向A端传送
MOVDX,60
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 复习题 11