内工大微机原理 第六章 微型计算机程序设计--1课件.ppt
文本预览下载声明
第六章 汇编语言程序设计6-1程序设计步骤6-2顺序程序6-3分支程序6-4循环程序6-5子程序6-6查表程序;6-1 程序设计步骤;6-2 顺序程序;二、举例设两个BCD码1234H和5678H分别存放在数据段中从1000H和2000H开始的单元中,计算这两个数的和,结果存放在3000H开始的单元中。
org 1000h
data1 dw 1234h
org 2000h
data2 dw 5678h
org 3000h
sum db 3 dup(?);MOV AL, DATA1
ADD AL, DATA2 ;低字节相加
DAA ;十进制调整
MOV SUM, AL ; 存低字节和
MOV AL, DATA1+1
ADC AL, DATA2+1 ;高字节带进位相加
DAA ;十进制调整
MOV SUM+1, AL ;存高字节和;
MOV AL,0
ADC AL,AL
MOV SUM+2,AL
;6-3 分支程序;例 :求AL中补码绝对值,送BL。(正数不变,负数求补。)
TEST AL,80H
JZ NEXT ;为正数?
NOT AL ;负数求补
INC AL
NEXT: MOV BL,AL
已知:AL=75H 运行程序后,
求:BL=?
已知:AL=F5H 运行程序后,
求:BL=? ;X=0?;SYMB: MOV AL,BL ;取X
ADD AL,0 ;OR AL,AL
JZ EXIT ;X=0,Y=X
TEST AL,80H
JNZ MINUS ;X<0
MOV AL, 1 ;X>0,Y=+1
JMP EXIT
MINUS: MOV AL,0FFH ;X<0,Y= -1
EXIT : MOV BH,AL ;保存Y
;;二、举例1
例: 求无符号字类型输数组中的最大值。已知数组存放在data开始的单元,字组长度10,最大值送存入变量max中。
定义数据:
dseg segment
data dw 0f0a3h,1,2,3,4,5,6,7,8,0ffffh
max dw ?
dseg ends;开始;START: MOV AX,DSEG
MOV DS,AX
MOV BX,OFFSET DATA
MOV AX,0
MOV CX,10
NEXT1: CMP AX,[BX]
JNC NEXT2 ;AX≥[BX]转到
MOV AX,[BX]
NEXT2: INC BX
INC BX
LOOP NEXT1
MOV MAX,AX ;例2: 确定一串ASCII码字符串的长度(小于一个字)。已知字符串首址BUF,???符串结束标志为回车符(0DH),字符串长度存NUM。
DSEG SEGMENT
BUF DB ‘HELLO WORLD!’,0DH
NUM DW ?
DSEG ENDS;开始;START: MOV SI,OFFSET BUF
MOV BX,0
MOV AL,0DH
NEXT: CMP AL,[SI]
JZ DONE
INC
显示全部