微机原理与接口技术编程18Word格式.docx
- 文档编号:16741385
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:19
- 大小:22.76KB
微机原理与接口技术编程18Word格式.docx
《微机原理与接口技术编程18Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术编程18Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
COUNTEQU($-BIN)/2
STRDB0DH,0AH,5DUP(?
),‘$’
DATAENDS
CODESEGMENT
CODE,DS:
DATA,ES:
DATA
MOVAX,DATA
MOVES,AX
MOVBX,OFFSETBIN
NEXT:
MOVDX,[BX]
CALLBTOD
INCBX
LOOPNEXT
BTODPROCNEAR
PUSHBX
PUSHCX
MOVDI,OFFSETSTR+2
MOVAL,‘‘
MOVCX,5
CLD
REPSTOSB
MOVAX,DX
MOVBX,10
MOVSI,OFFSETSTR+6
MOVDX,0
DIVBX
ADDDL,30H
MOV[SI],DL
DECSI
CMPAX,0
JNEGOON
MOVDX,OFFSETSTR
MOVAH,9
POPCX
POPBX
RET
BTODENDP
CODEENDS
3.对一个字符串中的字符进行统计,分别统计大写字母、小写字母、数字和其他字符的个数。
STRINGDB‘Thepriceis$500.’
COUNTEQU$-STRING
X1DB?
X2DB?
X3DB?
X4DB?
MOVSI,OFFSETSTRING
MOVBX,0
MOVDX,0
MOVAL,[SI]
CMPAL,‘0’
JBL1
CMPAL,‘9’
JBEL4
CMPAL,‘A’
CMPAL,‘Z’
JBEL2
CMPAL,‘a’
CMPAL,‘z’
JBEL3
L1:
INCDL
JMPNEXT
L2:
INCBH
L3:
INCBL
L4:
INCDH
INCSI
MOVX1,BH
MOVX2,BL
MOVX3,DH
MOVX4,DL
4.阅读下面的汇编语言程序,写出程序执行后屏幕上显示的内容。
STRDB0DH,0AH,3DUP(‘’),‘$’
MOVCX,1
CMPCL,0
JESTOP
MOVAX,CX
CALLHTOD
SALCX,1
STOP:
MOVAH,4CH
HTODPROCNEAR
MOVSI,OFFSETSTR+4
HTODENDP
1
2
4
8
16
32
64
128
5.编写程序,把数组ARRAY中的100个16位带符号数按从小到大的顺序排列。
(答案见书)
6.已知数组ARRAY中包含下列元素:
-9、6、10、-2、-12、-8、1、5、16,请编写程序找出其中的最小元素和最大元素,分别把它们存入MIN和MAX单元。
写出完整汇编语言程序。
ARRAYDW-9、6、10、-2、-12、-8、1、5、16
COUNTEQU($-ARRAY)/2
MINDW?
MAXDW?
MOVBX,OFFSETARRAY
MOVAX,[BX]
MOVDX,[BX]
CMPAX,[BX]
JGESKIP1
SKIP1:
CMPDX,[BX]
JLESKIP2
SKIP2:
INCBX
MOVMAX,AX
MOVMIN,DX
7.编写程序,比较两个字符串STR1和STR2是否相同。
如果相同,则把1送入变量RESULT中;
如果不同,则把0送入变量RESULT中。
DATASEGSEGMENT
STR1DB‘Theprogramistoolong.’
LEN1EQU$-STR1
STR2DB‘Theprogramisnotlong.’
LEN2EQU$-STR2
RESULTDB?
DATASEGENDS
CODESEGSEGMENT
CODESEG,DS:
DATASEG,ES:
DATASEG
MOVAX,DATASEG
MOVES,AX
MOVCX,LEN1
CMPCX,LEN2
JNENOSAME
LEASI,STR1
LEADI,STR2
REPECMPSB
JNENOSAME
MOVRESULT,1
JMPSTOP
NOSAME:
MOVRESULT,0
CODESEGENDS
ENDBEGIN
8.请用80x86汇编语言编写程序,从键盘输入一个字符串,把其中所有的小写字母转换成对应的大写字母,然后在屏幕输出该字符串。
DATA SEGMENT
STRING DB 255
DB ?
DB 255 DUP(?
)
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
BEGIN:
MOV AX,DATA
MOV DS,AX
LEA DX,STRING
MOV AH,10
INT 21H
LEA SI,STRING+2
MOV CL,STRING+1
MOV CH,0
GOON:
LODSB
CMP AL,”a”
JB SKIP
CMP AL,”z”
JA SKIP
SUB AL,32
SKIP:
MOV DL,AL
MOV AH,2
LOOP GOON
MOV AH,4CH
CODE ENDS
END BEGIN
9.请用80x86汇编语言编写程序,从数组ARRAY中搜索变量VAL的值,如果找到,则把所找到结果在数组中的位置序号(起始位置从1开始)送入变量RESULT中;
如果未找到,则把0送入变量RESULT中。
假定数组ARRAY中包含下列元素:
-9、6、10、-2、-12、-8、1、5、16,VAL为5。
COUNTEQU($-ARRAY)/2
VALDW5
RESULTDW?
DATAENDS
MOVAX,VAL
LEABX,ARRAY-2
MOVDX,0
MOVCX,COUNT
SEARCH:
INCDX
CMPAX,[BX]
LOOPNESEARCH
JNEFAILURE
MOVRESULT,DX
FAILURE:
MOVRESULT,0
ENDBEGIN
10.请用80x86汇编语言编写程序,从键盘输入一个不超过3位的十进制数,把该数的值保存到变量VALUE中。
要求程序能对非法输入(指按下了非数字键)进行检测,并在屏幕上显示该十进制数,当用户按回车键时表示输入结束。
VALUE DW ?
MOV BX,0
MOV CX,4
MOV AH,8
CMP AL,0DH
JE STOP
CMP AL,‘0’
JB GOON
CMP AL,‘9’
JA GOON
SAL BX,1
MOV DX,BX
ADD BX,DX
AND AL,0FH
MOV AH,0
ADD BX,AX
STOP:
MOV VALUE,BX
11.AX中存放4位16进制数,编写程序把这4位十六进制数转成ascii码,比如12ABh是个数字,把它转化成字符串’12AB’,存到DS段BUFF处。
(答案参考书第四章例题或题2,与题2不同处在于除以16,然后对0-9和A-Fh作不同处理)
12.请用80x86汇编语言编写程序,把缓冲区BLOCK中的正负数分开。
其中非负数存入POSITIVE缓冲区,负数存入NEGATIVE缓冲区。
BLOCKDW-6,5,0,-3,-1,-8,2,10,-5,-3,7,9,-2
COUNTEQU($-BLOCK)/2
POSITIVEDWCOUNTDUP(0)
NEGATIVEDWCOUNTDUP(0)
LEABX,BLOCK
LEASI,POSITIVE
LEADI,NEGATIVE
MOVAX,[BX]
JGEABOVE
MOV[DI],AX
INCDI
ABOVE:
MOV[SI],AX
INCSI
二、硬件编程
13.下图是8255A作为打印机接口的示意图。
图中BUSY是忙信号,如果BUSY=1,表示打印机正在打印字符,否则,表示打印机空闲;
STB是选通信号,负脉冲驱动打印机工作。
现在利用8255A的端口A输出字符编码,端口C传输BUSY和STB信号,端口A和端口C都采用方式0工作。
假设8255A的端口地址分配如下:
端口A 40H
端口B 41H
端口C 42H
控制口 43H
请根据上述条件编写一个完整的汇编语言程序,把内存缓冲区BUFFER中的字符串通过打印机输出,假设该字符串为"
Theprogramistestingaprinter"
。
BUFFERDB‘Theprogramistestingaprinter.’
SLENEQU$-BUFFER
DATASEGENDS
MOVAL,81H
OUT43H,AL
MOVAL,0DH
OUT43H,AL
LEABX,BUFFER
MOVCX,SLEN
INAL,42H
ANDAL,04H
JNEGOON
MOVAL,[BX]
OUT40H,AL
MOVAL,0CH
INCAL
OUT43H,AL
ENDBEGIN
14.某微型机的中断系统由3片8259A组成,以级联方式进行连接。
其中作为主片的8259A的端口地址为80H和81H,工作方式为特殊全嵌套、电平触发、缓冲及中断非自动结束,中断类型号为38~3FH。
第一个从片8259A的端口地址为82H和83H,工作方式为一般全嵌套、电平触发、非缓冲及中断非自动结束,中断类型号为40~47H,中断请求输出端INT与主片的IR3连接在一起;
第二个从片8259A的端口地址为84H和85H,工作方式为一般全嵌套、电平触发、非缓冲及中断非自动结束,中断类型号为48~4FH,中断请求输出端INT与主片的IR5连接在一起。
请编写程序分别对上述三个8259A芯片进行初始化。
主片的初始化程序:
MOVAL,19H
OUT80H,AL
MOVAL,38H
OUT81H,AL
MOVAL,28H
MOVAL,1DH
第一个从片的初始化程序:
OUT82H,AL
MOVAL,40H
OUT83H,AL
MOVAL,03H
MOVAL,01H
第二个从片的初始化程序:
OUT84H,AL
MOVAL,48H
OUT85H,AL
MOVAL,05H
15.假设8254的四个端口地址分别为1F0H~1F3H,其A1和A0分别与对应的地址线连接。
现在要求计数器0工作在方式0,计数初值为1000,按二进制计数;
计数器1工作在方式1,计数初值为50,按BCD码计数;
计数器2工作在方式3,计数初值为200,按二进制计数。
请写出对该8254初始化的程序段,以及读取计数器0当前值的程序段,要求把读出结果保存到寄存器AX中。
;
对计数器0初始化
MOVAL,30H
MOVDX,1F3H
OUTDX,AL
MOVAX,1000
MOVDX,1F0H
MOVAL,AH
对计数器1初始化
MOVAL,53H
MOVAL,50H
MOVDX,1F1H
对计数器2初始化
MOVAL,96H
MOVAL,200
MOVDX,1F2H
读取计数器0的当前值
MOVAL,00000000B
MOVDX,1F3H
OUTDX,AL
MOVDX,1F0H
INAL,DX
MOVAH,AL
XCHGAH,AL
16.假设8255A的4个端口地址分别为300H~303H,请编写程序首先将A口设置为工作方式1且为输入,B口设置为工作方式0且为输出,然后从PC5引脚输出一个正脉冲。
CODE
MOVAL,10110000B
MOVDX,303H
OUTDX,AL
MOVAL,00001010B
NOP
MOVAL,00001011B
ENDBEGIN
17.有一个终端输出设备,它的数据端口地址为8000H,状态端口地址为8001H。
其中状态端口的D2位若为1表示此时可以向该设备输出字符,请编写一个程序,向该设备输出50个字符,已知这些字符保存在BUFFER开始的内存缓冲区中。
BUFFERDB50DUP(?
MOVBX,OFFSETBUFFER
MOVCX,50
MOVDX,8001H
INAL,DX
TESTAL,04H
JZGOON
MOVDX,8000H
MOVAL,[BX]
18.有一个CRT终端设备,它的数据端口地址为8000H,状态端口地址为8001H。
其中状态端口的D6位为READY,若为0表示输入数据有效,此时CPU可从数据端口输入一个数据。
请编写一个程序,从终端上输入100个字符,并传送到以BUFFER开始的内存缓冲区中。
BUFFERDB100DUP(?
MOVCX,100
TESTAL,40H
MOV[BX],AL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 编程 18