欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【0603】汇编语言源程序组织

程序员文章站 2024-01-31 14:35:46
...

标号

1.标号就是程序中某一条特定指令的符号地址.标号所指示的地址位于代码段.

标号:指令助记符 操作数
例:L1: ADD AL,BL

​ VAR DB 12H ;

段属性SEG
偏移量属性OFFSET
类型属性TYPE

2.符号名字段:任选字段,不一定是变量,也可能是常量,表示地址

符号名 伪指令符 操作数 ;

例:VAR DB 12H ;

VAR EQU 10

3.变量,指某一个特定的内存单元,是具体的实在的。

语句格式:变量名 DB 表达式1,表达式2…

例:VAR DB 12H ;

4.常量,只能进行一次赋值,没有赋予任何内存单元

VAR EQU 10,VAR是常量,不是变量

等号语句的作用和等值语句完全一致,但用等号定义过的符号可以再次使用等号修改其定义。

算术运算

表示地址的变量只能做减法运算.

逻辑运算符

包括AND、OR、XOR、NOT四个运算符,只能用于数值表达式。

关系运算符

包括EQ、NE、LT、LE、GT、GE六个运算符

数值返回运算符

SEG运算符

加在引用的变量名或标号前面,运算结果是返回该变量或标号的段基值
MOV  AX,SEG VAR1
MOV  DS,AX

OFFSET运算符

加在引用的变量名或标号前,运算结果为返回该变量或标号的偏移量。
mov ax, offset var1 ;汇编后是立即数
lea ax, var1 ;内存单元的偏移量
;固定搭配通用寄存器

TYPE运算符

加在引用的变量名或标号前,运算结果为返回该变量占用的字节数,或标号的FAR(-1)或NEAR类型(-2) 。
var1 db ?
var2 dw ?
……
mov ax, type var1 ;=1
mov bx, type var2 ;=2

LENGTH运算符

针对DUP.如果定义该变量时使用了DUP关键字,那么返回重复的次数;如果没有使用DUP,那么返回1。

SIZE运算符

只能加在引用变量名前,返回结果相当于LENGTH运算符和TYPE运算符的乘积,即数组变量总共占用的字节数目。
SIZE = LENGTH × TYPE

属性运算符

PTR运算符

PTR 地址,类型有:BYTE,WORD,DWORD

例子:mov al ,byte ptr var1

介绍两个DOS功能调用:

(1)1号功能键盘输入
格式: AH=1【mov AH 1H】
INT 21H
功能:从键盘输入一个字符并将该字符的ASCII码送入AL中。
(2)2号功能显示器输出
格式: AH=2【mov AH 2H】
DL=字符
INT 21H
功能:输出DL中的一个字符到显示器的光标处。

程序的段结构

段定义伪指令

段名 SEGMENT

其他伪指令

(1)地址计数器$ ,

$表示数据段的当前地址偏移量。

(2)段寻址伪指令ASSUME

在程序设计中,ASSUME语句一般在代码段中位于所有指令语句之前。

(3)begin—end

第一条指令的地址在源程序中是通过END伪指令来确定的。

示例:
数据段、堆栈段略去
code  segment
          assume  cs:code,ds:data,ss:stack1
begin: mov  ax, data	;初始化DS、ES
           mov  ds, ax
           ……			;程序主体
           mov  ah, 4ch	;返回DOS
           int     21h
code   ends
           end    begin		;结束源程序

(3)SS的装入

两种方法

自动初始化:如果希望采用这种初始化方式,在定义堆栈段时必须使用STACK作为组合类型。对STACK段,操作系统将程序装入到内存准备运行时,会自动初始化SS和SP。

stack1   segment    stack
              dw    20h  dup(0)
stack1   ends

手动初始化:MOV指令

基本结构框架

(1)使用特定的中断调用

mov  ah, 4ch	;返回DOS
           int     21h