DOS功能调用
DOS功能调用中的4CH号调用,其功能是结束当前程序,返回DOS,其调用方法是在程序结束前加入一下两条指令
MOV AH,4CH
INT 21H
用汇编语言程序实现C = A + B
DATA SEGMENT
A DB ?
B DB ?
C DB ?
DATA ENDS
STACK SEGMENT
ST DB 200 DUP(?)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV A,78
MOV B,-65
MOV AL,A
MOV AL,B
MOV C,AL
RET
MAIN ENDP
CODE ENDS
END START
对汇编程序语言结构的说明,
分段结构,至少包含代码段
变量的定义,通常在数据段和附加段完成
堆栈段主要用于存放需要保护的数据,
ASSUME伪指令
指明程序逻辑段和存储器物理段之间的对应关系,但没有建立对应关系
用END伪指令结束整个源程序。
关系运算符:
相等 | 不相等 | 小于 | 大于 | 小于等于 | 大于等于 |
EQ | NE | LT | GT | LE | GE |
操作对象:数值或统一逻辑段地址
关系运算结果成立时,其结果全为1,
结果不成立时,其结果全为0
逻辑运算符
逻辑非 | 逻辑与 | 逻辑或 | 逻辑异或 |
NOT | AND | OR | XOR |
分析运算符主要用于分析操作对象的属性,操作对象可以是变量或标号
运算符 | 操作对象 | 功能 |
OFFSET | 变量或标号 | 分析变量或标号所在逻辑段的偏移地址 |
SEG | 变量或标号 | 分析变量或标号所在逻辑段的段地址 |
TYPE | 变量或标号 | 分析变量或标号的类型属性 |
LENGTE | 变量 | 分析变量的长度 |
SIZE | 变量 | 分析变量的大小 |
伪指令
用于告诉汇编程序逻辑段和物理段之间的关系
注意:
ASSUME语句一般放在代码段内,一般放在代码段之首
ASSUME位操作只是通知汇编程序有关段寄存器与逻辑段关系,并没有给段寄存器赋予实际的初值。
数据定义伪指令
语句格式
变量名 DB 表达式 ;定义字节数据
变量名 DW 表达式 ;定义子数据
变量名 DD 表达式 ;定义双子数据
操作数:操作数是变量定义时分配的存储空间中赋予的初值,可以是数字,字符串,表达式,变量和标号。
1,操作数是一个或多个变量数值常量
如果是多个操作数,操作数之间用,隔开
例:D1 DB 12H,25H
定义字节类型变量D1,分配两个存储单元,初值位12H,25H
D2 DW 1234H
定义字类型变量D2,分配两个存储单元,初值为34H,12H
D3 DD 1A2B3C4D
定义双子类型变量,分配四个存储单元,初值为,4DH,3CH,2BH,1AH
2,操作数是一个或多个可求值的数值表达式。
顺序结构设计
例,在内存数据区2100H单元存有2位压缩BCD码,将其变成非压缩BCD码,低位位于2100H,高位位于2101H
分析:2100H单元存储2位BCD码需要将2位进行分离
分离出低四位的方法,数据与0FH进行逻辑与运算
分理出高四位的方法,将数据进行右移四位
DATA SEGMENT
ORG 2000H
ZBCD DB 56H
FBCD DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS,DATA
START:
MOV AX,DATA
MOV DS,AX
LEA BX ZBCD
MOV AL,[BX]
AND ZEBD,0FH
MOV CL,4
SHR AL,CL
MOV [BX+1],AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
例2:已知一班微机原理课程按照学号从小到大的顺序排例在SCOCE表格中,要差的学生学号存放在变量NO中,查找学生的成绩将成绩存放到RESULT单元中。
DATA SEGMENT
SCORE DB 85,76,67,57,82,74,92,95,83,68
NO DB 7
RESULT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEB BX.SCORE
MOV AL,NO
DEC AL
XLAT
MOV RESULT,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
分支结构程序设计
将键盘输入的一个小写字母用大写字母的形式在屏幕上显示出来
CODE SEGMENT
ASSUME CS:CODE
MAIN PROC FAR
START
PUSH DS
MOV AX,0
PUSH AX
MOV AH,1
INT 21H
CMP AL,'a'
JB OVERFLOW
CMP AL,'Z'
JA OVERFLOW
SUB AL,20H
MOV DL,AL
MOV AH,06H
INT 21H
OVERFLOW :RET
MAIN ENDP
CODE ENDS
END START
内存自1000H开始存放3个带符号的字节数据,将其中最大的值送到气候的RESULT单元
DATA SEGMENT
ORG 1000H
BUF DB 13H,89H,76H
RESULT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX:DATA
MOV DS,AX
MOV BX,1000H
MOV AL,[BX]
INC BX
CMP AL,[BX]
JGE NEXT
MOV AL,[BX]
NEXT:
INC BX
CMP AL,[BX]
JGE EXIT
MOV AL,[BX]
EXIT:MOV RESULT AL
MOV AH,4CH
INT 21H
CODE ENDS
END START