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

标号

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值