微型计算机原理与接口技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序编写:赵云峰
整理:B08232 班 黄之皓
LOP: CMP JZ SHL JNC INC NEXT:
AX,0 EXIT AX,1 NEXT CL
JMP LOP EXIT: MOV CONT,CL INT 20H COD ENDS END START
例 5-7: 编写程序将两个 n 字节的无符号数相加, 结果存入 SUM 开始的 n+1 字节存储区中。 DAT SEGMENT DAT1 DB 12H,34H,56H,71H,23H,45H,67H DAT2 DB 76H,54H,32H,17H,65H,43H,21H SUM DB 8 DUP(?) DAT ENDS COD SEGMENT ASSUME CS:COD,DS:DAT START: MOV AX,DAT MOV DS,AX XOR AX,AX MOV BX,OFFSET DAT1 MOV SI,OFFSET DAT2 LEA DI,SUM MOV CX,7 CLC LP: MOV AL,[SI] ADC AL,[BX] MOV [DI],AL INC BX INC SI INC DI LOOP LP ADC BYTE PTR [DI],0 MOV AH,4CH INT 21H COD ENDS END START
整理:B08232 班 黄之皓
START: MOV MOV XOR LEA MUL32: MOV MOV MOV MUL MOV MOV MUL ADD ADC MOV MOV XOR XOR MOV
AX,DATA DS,AX AX,AX BX,MULNUM AX,[BX] SI,[BX+4] DI,[BX+6] SI ;B*d [BX+8],AX [BX+0AH],DX DI ;B*C AX, [BX+0AH] DX,0 [BX+0AH],AX [BX+0CH],DX AX ,AX DX ,DX AX,[BX+2]
北华航天工业学院
程序编写:赵云峰
整理:B08232 班 黄之皓
MOV MOV MOV MOV INC LP: MOV CMP JB INC NEXT: INC DEC JNZ MOV MOV
SI,OFFSET BUF CH,[SI] CL,0 BX,0 SI AH,[SI] AH,90 BLOW90 BH SI CH LP SI,OFFSET NUM [SI],BH
程序编写:赵云峰
整理:B08232 班 黄之皓
4.9 练习题 10、写一个宏定义,要求能把任意一个寄存器的最低位移至另一个存储器的最高位中。 DATA SEGMENT XTY MACRO X,Y VAR1 DB 4,6 MOV AX,X VAR2 DD 200 DUP(?) AND AX,1 DATA ENDS ROR AX,1 MOV Y,AX STACKS SEGMENT ENDM MOV DX,1 STACKS ENDS MOV AX,0 XTY DX,AX, CODES SEGMENT MOV AH,4CH ASSUME CS:CODES,DS:DATA,SS:STACKS INT 21H START: CODES ENDS MOV AX,DATA END START MOV DS,AX 11、利用 DOS 功能调用从键盘输入 60 个字符到缓冲区 BUF 中,在按下 ENTER 键后在屏幕 上显示这些字符。请写出程序段。 DATA SEGMENT ST1 DB 'Please input 60 characters from keyboard.',0DH,0AH,'$' BUF DB 61 DUP(?) DATA ENDS COD SEGMENT ASSUME CS:COD,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DL,07H MOV AH,2 INT 21H MOV DX,OFFSET ST1 MOV AH,9 INT 21H LEA SI, BUF MOV CX,60 LP: MOV AH,7 INT 21H MOV [SI],AL CMP AL,0DH JZ EXIT INC SI LOOP LP EXIT: MOV BX,60 SUB BX,CX MOV CX,BX LEA SI, BUF LP2: MOV DL,[SI] MOV AH,6 INT 21H INC SI LOOP LP2 MOV AH,4CH INT 21H COD ENDS END START
MOV AX,BX[SI] SHL DX,1 JC ADD5 ADD AX,10 JMP SHORT RESULT ADD5: ADD AX,5 RESULT: MOV BX[SI],AX INC SI LOOP AGAIN MOV AH,4CH INT 21H CODES ENDS END START
MOV [SI+1],BL MOV [SI+2],CL MOV AH,4CH INT 21H BLOW90: CMP AH,60 JB BLOW60 JMP ABOV60 ABOV60: INC BL JMP NEXT BLOW60: INC CL JMP NEXT CODES ENDS END START
Biblioteka Baidu
MUL SI ;A*D ADD AX,[BX+0AH] ADC DX,[BX+0CH] PUSHF MOV AX,[BX+0AH] MOV DX,[BX+0CH] XOR AX ,AX XOR DX ,DX MOV AX,[BX+2] MUL DI ;A*C POPF ADC AX,[BX+0CH] ADC DX,0 MOV [BX+0CH],AX MOV [BX+0EH],DX XOR AX,AX MOV AH,4CH INT 21H COD ENDS END START
北华航天工业学院
程序编写:赵云峰
整理:B08232 班 黄之皓
12、试写一段程序,要求先给出一声铃响提示,屏幕上显示:“Please input a alphabet:”,然 后从键盘输入一个字母送 BL。 DATAS SEGMENT ST1 DB 'Please Input a alphabet:',0DH,0AH,'$' ST2 DB ? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV DL,7 MOV AH,2 INT 21H MOV DX,OFFSET ST1 MOV AH,9 INT 21H MOV AH,1 INT 21H MOV BL,AL MOV AH,4CH INT 21H CODES ENDS END START
例 5-8:编制程序用单字符输出的 DOS 功能调用向屏幕输出以“%”结束的字符串。 DAT SEGMENT ST1 DB 'How are you?%' DAT ENDS COD SEGMENT ASSUME CS:COD,DS:DAT START: MOV AX,DAT MOV DS,AX LEA SI,ST1 AGAIN: MOV DL,[SI] CMP DL,'%' JZ ENDOUT MOV AH,2 INT 21H INC SI JMP AGAIN ENDOUT: MOV AH,4CH INT 21H COD ENDS END START
例 5-1(老书) :编制实现两个三十二位数相乘的程序。 DATA SEGMENT MULNUM DW DW 0B8FDH DW 0DFE6H DW 78FFH DW 4 DUP(?) DATA ENDS COD SEGMENT ASSUME CS:COD,DS:DATA
北华航天工业学院
1234H
程序编写:赵云峰
例 5-10:设某一数组的长度为 N,各元素均为字数据,试编制一个程序使该数组中的数据 按照从小到大的次序排列。 DATAS SEGMENT DAT DB 25,68,86,98,34,67,12,4,49,27 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0 MOV CX,10 DEC CX LOP1: MOV DX,CX LOP2: MOV AL,DAT[BX] CMP AL,DAT[BX+1] JBE CONTI XCHG AL,DAT[BX+1] MOV DAT[BX],AL CONTI: ADD BX,1 LOOP LOP2 MOV CX,DX MOV BX,0 LOOP LOP1 MOV AH,4CH INT 21H CODES ENDS END START
例 5-5 利用表内地址跳转法来实现使键盘上 A、B、C、D4 个字母键成为 4 条输入命令,使 之分别对应 4 个具有不同算法的控制子程序。 DATAS SEGMENT BASE DB 'pa','pb','pc','pd' KEY DB ? DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX LOP: XOR AX,AX MOV AH,1 INT 21H CMP AL,41H JB LOP CMP AL,44H JA LOP SUB AL,41H MOV BX,OFFSET KEY MOV AH,0 ADD BX,AX JMP WORD PTR[BX] MOV AH,4CH INT 21H CODES ENDS END START
第五章 汇编语言程序设计
例 5-1:试用 8086CPU 的指令实现 Y = (X1 +X2)/2 的程序设计。 DATAS SEGMENT X1 DB 34H X2 DB 89H Y DW ? DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,0 MOV AL,X1 MOV BL,X2 ADD AL,BL ADC AH,0 SAR AX,1 MOV [Y],AX MOV AH,4CH INT 21H CODES ENDS END START
例 5-2:将一位十六进制数转换成与它相对应的 ASCII 码。 DATAS SEGMENT TAB DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H HEX DB 8 ASC DB ? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,OFFSET TAB MOV AL,HEX XLAT MOV ASC,AL MOV AX,4C00H INT 21H CODES ENDS END START
例 5-6:试编写一程序,统计出某一字数据中“1”的个数。 DAT XDA CONT DAT SEGMENT DW DB ENDS ASSUME START: MOV MOV MOV MOV CS:COD,DS:DAT AX,DAT DS,AX CL,0 AX,XDA
北华航天工业学院
3AD8H ?
COD SEGMENT
例 5-3:要求对不足 250 个的学生成绩进行统计分析,统计出优秀、及格和不及格的人数。 DATAS SEGMENT BUF DB 15 DB 64,78,89,55,69,98,45,67,96,99,92,89,85,91,45 NUM DB 3 DUP(?) DATAS ENDS
CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX
例 5-9:设有 16 个内存单元需要修改,修改规律是第 1、3、6、9、12 号单元均加 5,其余 单元均加 10,试用循环结构变成实现。
北华航天工业学院
程序编写:赵云峰
整理:B08232 班 黄之皓
DATAS SEGMENT XDA DB 16 DUP(?) LRULER DW 0A490H DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV SI,0 MOV CX,16 MOV BX,OFFSET XDA MOV DX,LRULER AGAIN: