微机原理与接口技术(第3版)汇编语言程序设计(4.2)

  • 格式:pdf
  • 大小:871.89 KB
  • 文档页数:45

4.4 汇编语言程序设计
4.4.1汇编语言程序设计基本步骤
分析问题,抽象出问题的数学模型 确定解决问题的的算法 按算法画出程序流程图 按流程图编写程序 上机调试, 运行程序
1


4.4汇编语言程序设计
常用的汇编语言程序框架

DATA VAL1 DATA CODE SEGMENT DB 12H , 8EH …… ENDS ;定义数据段 ;定义变量 ;数据段结束
SEGMENT ;定义代码段 ASSUME DS:DATA , CS: CODE ;段属性说明 START: MOV AX , DATA ;初始化DS MOV DS , AX …… ;填写代码 MOV AX , 4C00H ;返回DOS INT 21H CODE ENDS ;代码段结束 END START ;源程序结束 2


4.4.2汇编语言程序的 基本结构——顺序结构
顺序结构 简单程序,顺序执行, 又称直线程序
开始 执行1 执行2 结束
3


4.4.2汇编语言程序基本结构 ——顺序结构(续)
例: DATA BLOCK BUFF DATA CODE SEGMENT DW 0ABCDH ;字变量赋值 DD? ;预留双字单元 ENDS SEGMENT ASSUMT CS:CODE,DS:DATA MOV AX, DATA ;设数据段寄存器 MOV DS, AX ;的值 MOV DX, BLOCK
4
START:


4.4.2汇编语言程序基本结构 ——顺序结构(续)
MOV AND AND MOV SHR LED MOV MOV MOV MOV AX, DX AX, 0F0FH DX, 0F0F0H CL, 4 DX, CL BX, BUFF [BX+0], AL [BX+1], DL [BX+2], AH [BX+3], DH ;AX=0B0DH ;DX=A0C0H ;右移4次,DX=0A0CH ;BX指向预留单元 ; [BX+0]=0DH ; [BX+1]=0CH ;存结果 [BX+2]=0BH ; [BX+3]=0AH
5


4.4.2汇编语言程序基本结构 ——顺序结构(续)
MOV AX, 4C00H INT 21H CODE ENDS END START ;dos调用
6


4.4.2汇编语言程序基本结构 ——分支结构 分 支 程 序 结 构 示 意 图
7


例:Y =
1 0 -1
当X>0 当X=0 当X<0
Y=
符号函数实现流程图
8


4.4.2汇编语言程序基本结构 ——分支结构(续)
例: MY-D MEMS MEMD MY-D MY-C START: SEGMENT DB 08h ;存放X DB ? ;存放Y ENDS SEGMENT ASSUME DS:MY-D CS:MY-C, MOV AX,MY-D MOV DS,AX ;设置DS
9


MOV AL,MEMS CMP AL,0 JGE NEXT ; X ≥0 ,带符号数比较指令 MOV AL,-1 ;X<0,-1送入MEMD单元 JMP DONE NEXT: JE DONE ; ZF=1转移 MOV AL,1 ;X >0,1送入MEMD单元 DONE: MOV MEMD,AL ;X=0, 0送入MEMD单元 MOV AH,4C00H INT 21H MY-C ENDS END START
10


——
——
例4-1:编程统计BUFF缓冲区
中负数的个数
START
例4-2:
结果存放在DL寄存器中。

4.
宏定义与宏调用
宏定义与宏调用(续)
宏调用----经宏定义后的宏指令就可在源 程序中调用,称宏调用 格式 宏指令名 实元表 宏展开就是用宏定义体取代源程序中的 宏指令
21


宏定义与宏调用(续)

宏指令名
MULTY MACRO OPR1,OPR2,RESULT …… ENDM ;宏定义 …….. CODE SEGMENT ASSUME CS:CODE DS:DATA …… MULTY XX,YY,ZZ
宏调用 实元 哑元
P102例 P102例
22


宏展开:汇编程序会把宏调用按宏定义展开。

例如:宏定义为:
DISPLAY MACRO string LEA DX,string MOV AH,9 INT 21H ENDM 程序中宏调用: …… DISPLAY ERROR_MESSAGE DISPLAY EXIT_MESSAGE …… 汇编后的结果:(带有+号的指令为宏展开后的结果) …… + LEA DX,ERROR_MESSAGE + MOV AH,9 + INT 21H + LEA DX,EXIT_MESSAGE + MOV AH,9 + INT 21H ……
23


宏与子程序的比较

仅是源程序级的简化:宏 调用在汇编时进行程序语 句的展开,不需要返回; 不减小目标程序,执行速 度没有改变 通过形参、实参结合实现 参数传递,简捷直观、灵 活多变
比较
子程序
还是目标程序级的简化: 子程序调用在执行时由 CALL指令转向、RET指令返 回;形成的目标代码较 短,执行速度减慢 需要利用寄存器、存储单 元或堆栈等传递参数
24


4.6汇编语言设计与上机调试 1.算术运算例题
例4-5:有两个无符号字节型数组,设数组元素
个数相等,编程将数组中的对应元素相加,结 果存入另一内存区。

程序如下: DATA SEGMENT M1 DB 20 DUP(?) M2 DB 20 DUP(?) M3 DW 20 DUP(0) DATA ENDS P104例
25


算术运算例题(续)
CODE SEGMENT ASSUME CS:CODE,DS:DATA STARRT: MOV AX,DATA MOV DS,AX LEA SI,M1 ;设数组指针 LEA DI,M2 LEA BX,M3 ;设结果区指针 MOV CX,20 ;设相加元素计数器
26


AA1: MOV AL, [SI] ;取加数 ADD AL, [DI] ;相加 MOV [BX],AL ;存结果 ADC BYTE PTR[BX+1],0;存结果的进位 INC SI ;修改指针 INC DI ADD BX,2 LOOP AA1 ;数组未加完,继续 MOV AX,4C00H INT 21H CODE ENDS END START
27


代码转换例题
例4-9:十六进制数到十进制数的转换
SEGMENT PARA STACK ‘STACK’ DW 50 DUP(?) ENDS ;设置堆栈 SEGMENT ASSUME CS;CODE,SS:SST START: MOV AX,SST MOV SS,AX
28
SST TOP SST CODE


MOV AX,4B6CH ;待转换数作被除数 MOV CX,0 ;统计除法次数 MOV BX,10 ;除数为10 A1:MOV DX,0 ;被除数扩展为32位 DIV BX PUSH DX ;保存转换好的数 INC CX OR AX,AX ;转换直到商为0 JNZ A1 ;否则继续除以10 MOV AX,4C00H INT 21H CODE ENDS END START
29


4.6.2DOS功能调用与子程序设计
BIOS
IBMBIO
IBMDOS
30


DOS
DOS
DOS
DOS
DOS
子程序调用
说明:
子程序调用
mov ax,wvar
ASCII。