微机原理与接口技术复习总结讲解.ppt
文本预览下载声明
*;*;*;*;*;*;*;思考题:;*;*;*;*;习题;第4章 汇编程序设计;[基本要求];1.编程计算((X+Y)*10)+Z)/X,X、Y、Z都是16位无符号数,结果存在RESULT开始的单元。
算法:
1)算数和扩展为2个字,4字节,用DX,AX暂存结果;
2)加法考虑进位,用ADC;减法考虑借位用SBB。
3)除法DIV,乘法MUL指令;1.(习题4.11 )试编程序,统计由40000H开始的16K个单元中所存放的字符“A”的个数,并将结果存放在DX中。
分析:
1)需要循环控制,循环次数已知,数据指针可以用SI,数据段初始化为(DS)=4000H,(SI)=0000H;
2)查找到“A” ,可以用比较指令CMP,配合JE/JNE, LOOP
(或用串操作指令SCASB);DATA SEGMENT
BUF DB DFASFAAAFDFAAFFFA
COUNT EQU $-BUF
NUM DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
MOV CX,COUNT ;COUNT=16*1024
MOV DX,0
LEA SI,BUF
MOV BL,A
NEXT : CMP [SI],BL
JNE OTHER
INC DX
OTHER: INC SI
LOOP NEXT
LP:JMP LP ;程序陷阱,方便调试
CODE ENDS
END BEGIN;2.(习题4.12)统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。 ; MOV SI,OFFSET BLOCK
MOV DI,OFFSET PLUS_D
MOV BX,OFFSET MINUS_D
MOV CX, 8 ;数据个数送CX
GOON:MOV AL,[SI]
TEST AL, 80H
JNZ JMIUS ;为负数,转
INC PLUS ;正数个数加一
MOV [DI],AL ;传正数
INC DI
JMP AGAIN
JMIUS: INC MINUS ;负数个数加一
MOV [BX],AL
INC BX
AGAIN: INC SI
DEC CX
JNZ GOON;2.(习题4.17)将BUF1开始的100字节传送到BUF2开始的单元,然后从中检索字符“#”,并将此单元换成空格字符。 ;3、(习题4.8)编写一段程序,比较两个5字节的字符串OLDS和NEWS,若相同,在RESULT置0,否则置0FFH。;4.(习题4.9)编求和Y=A1+A2+…+A100,Ai为字节。
分析:1)字节累加,算法为si=si+ai。和扩展为2个字节,其中部分和低位存AL,高位扩展到AH,用于处理累加和产生的进位。
2) 用ADD计算字节累加和,用ADC将进位加到高位,用LOOP完成循环。
;5.(例4-7)编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。
【分析】
1)算法:SUM=1+2+3+…
用S表示部分和,即:
Si=Si-1+i ;i=1,2,3,…
2)可用AX求累加和S,BX存自然数i。;DATA SEGMENT
SUM DW ?
CN DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX ;初始化
MOV AX,0 ;0送AX
MOV BX,0 ;0送BX
LP: INC BX
ADD AX,BX ;求累加和
CMP AX,1000;条件控制
JBE LP ;≤1000转LP
MOV SUM,AX
M
显示全部