微机原理 第四章:汇编语言程序设计


微机原理 第四章:汇编语言程序设计

4.1 汇编语言程序框架

stack SEGMENT PARA 'stack'
      DB  100 DUP('stack')
stack ENDS
;----------------------------------
data SEGMENT
     <数据、变量在此定义>
data ENDS
;----------------------------------
code SEGMENT
     ASSUME CS:code,DS:data,ES:data
start: MOV AX,data
       MOV DS,AX
       MOV ES,AX
       <此处加入自己的程序段>
       MOV AL,4CH
       INT 21H
code   ENDS
        END start

4.2 汇编语言格式

4.2.1 操作数域

4.2.1.1 算术运算符

+(加),-(减),*(乘),/(除)

MOD(求余),SHL(左移),SHR(右移)

MOV AH,VR+2
MOV AL,3*10-20
MOV BH,10 MOD 3
MOV BL 01010B SHL 4

4.2.1.2关系运算符

EQ(相等),NE(不相等),LT(小于),GT(大于),

LE(小于等于),GE(大于等于)

4.2.1.3 分析运算符

SEG :提取标号或变量的段基址
OFFSET :提取标号或变量的偏移地址
TYPE :提取标号或变量的类型属性,常用数字表示
LENGTH :提取数组变量中所含变量的个数
SIZE :提取数组变量中所含变量的总字节数

SIZE x=TYPE x * LENGTH x

;假设数据段从40000H开始    
    DATA SEGMENT
    V1 DB ABH,CDH
    V2 DW 34C1H,213DH
    V3 DD 12345678H,9ABCDEF0H
    V4 DW 20DUP(5)
    DATA ENDS
;SEG
MOV AX,SEG V1    ;(AX)=4000H
MOV BX,SEG V2    ;(BX)=4000H
MOV CX,SEG V3    ;(CX)=4000H
;OFFSET
MOV AX,OFFSET V1    ;(AX)=0
MOV BX,OFFSET V2    ;(BX)=2
MOV CX,OFFSET V3    ;(CX)=6
;TYPE
MOV AX,TYPE V1    ;(AX)=1
MOV BX,TYPE V2    ;(BX)=2
MOV CX,TYPE V3    ;(CX)=4
;LENGTH
MOV AX,LENGTH V1    ;(AX)=1
MOV BX,LENGTH V2    ;(BX)=1
MOV CX,LENGTH V3    ;(CX)=1
MOV DX,LENGTH V4    ;(DX)=20
;SIZE
MOV AX,SIZE V1    ;(AX)=1
MOV BX,SIZE V2    ;(BX)=2
MOV CX,SIZE V3    ;(CX)=4
MOV DX,SIZE V4    ;(DX)=40

4.2.1.4 综合运算符

PTR:将左边的类型指令指定给其右边的地址。

DATA1    DB 10H,20H,30H
DATA2    DW 4023H,1A00H
    ......
MOV AX,WORD PTR DATA1    ;(AX)=2010H
MOV BL,BYTE PTR DATA2    ;(BX)=23H

4.2.2 伪指令

4.2.2.1. 数据定义伪指令

DB 一个字节, DW 一个字

重复操作符DUP:当一个定义的存储区内的每个单元要放置同样的数据时可用。

符号定义伪指令EQU

注:用EQU定义的符号未清楚前,不能重新定义(清楚定义可用PURGE伪指令),但用“=”定义的符号可在任何时候进行重定义。

4.2.2.2. 段定义伪指令

段名    SEGMENT
        ...
段名    ENDS

4.2.2.3. 段寻址伪指令

ASSUME 段寄存器:段名,段寄存器:段名
ASSUME CS:code,DS:data,ES:data

①. 代码段中必须至少有一个ASSUME语句;

②. 说明段名与段寄存器的对应关系,并没有把段基址值送入段寄存器。

4.2.2.5. 过程定义伪指令

过程名 PROC 属性
        ...
      RET
        ...
过程名 ENDP

至少有一条RET指令,可在过程中的任何位置。

4.2.2.6. 程序计数器

$:表示程序下一个所能分配的存储单元的偏移地址。

DATA SEGMENT
     A1 DB 10H,20H,30H
     C1 EQU $-A1    ;$-A1=03H-00H=03H
DATA ENDS

4.2.2.7. 定位伪指令

ORG:指定下一条指令语句或变量的偏移地址。

4.3 DOS系统功能调用介绍

在DOS系统中,功能调用都是用软中断指令INT 21H来实现的

DOS键盘功能调用

返回DOS(功能号4CH)

使用户程序执行完后返回DOS提示符状态

MOV AH,4CH
INT 21H

从键盘输入一个字符(功能号=01H)

MOV AH,1
INT 21H
<AL中有键入的字符>

输入字符串(功能号=0AH)

MOV AH,0AH
LEA DX,<字符串缓冲区首地址>
INT 21H

在显示器上显示一个字符(功能号=02H)

MOV AH,2
MOV DL,<要显示的字符>
INT 21H

显示字符串(功能号=09H)

MOV AH,9
LEA DX,<字符串>
INT 21H

被显示的字符串必须以”$”结束。


文章作者: Mat Jenin
文章链接: http://matjenin.xyz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mat Jenin !
  目录