当前位置:文档之家› 汇编语言的基本语法.

汇编语言的基本语法.


段定义伪指令 段名 SEGMENT [属性] …… 段名 ENDS DATA SEGMENT PARA ‘DATE’ 段对齐属性 BYTE/WORD/DWORD/PARA/PAGE 段类属性 ‘CODE’/’DATA’/’STACK’/’EXTRA’
段寄存器定义伪指令 ASSUME 段寄存器:段名 [,段寄存器:段名,...]
类型: NEAR——与主程序在同一个段 FAR ——可以与主程序不在同一个段
子程序设计
过程调用
近程调用
CALL 过程名 •将当前IP寄存器内容进栈(保存CALL下一 条指令的偏移地址) •将被调用过程的偏移地址送IP寄存器,控制 程序转移到该过程
DATA SEGMENT MESSAGE DB "Hello world!",0DH,0AH,"$" DATA ENDS SSEG SEGMENT STACK DB 100 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DATA,SS:SSEG START: MOV AX, DATA MOV DS, AX
程序段N
后继程序段Y
循环结构
DO-UNTIL
WHILE-DO
õ Ê ³ ¼ » ¯ ² ¿ · Ö õ ¼ Ì þ ­ » Ñ ·Ì å Þ ¸ Ð Ä ² ¿ · Ö ó ¼ º Ì ³ Ì Ð ò
õ Ê ³ ¼ » ¯ ² ¿ · Ö ­ » Ñ ·Ì å Þ ¸ Ð Ä ² ¿ · Ö õ ¼ Ì þ
SUM:
汇编语言源程序的结构——简化的段定义
MASM提供了简化的段定义伪指令,使用指 定的内存模式编程。
.586 .MODEL SMALL .DATA .STACK 100 .CODE .STARTUP .EXIT END
;选择指令系统 ;内存模式说明 ;定义数据段 ;定义堆栈段 ;定义代码段 ;指示程序开始,初始化DS,SS寄存器 ;结束程序,返回操作系统
CALL FAR PTR DISPLAY
MOV AH, 4CH INT 21H
DISPLAY PROC FAR
MOV DX, OFFSET MESSAGE MOV AX, SEG MESSAGE MOV DS, AX MOV AH, 9 INT 21H
RET DISPLAY ENDP
内存模式 •TINY 程序和数据在64K字节段内 •SMALL 独立的代码段和独立的数据段 •MEDIUM 单个数据段,多个代码段 •COMPACT 单个代码段,多个数据段 •LARGE 多个代码段,多个数据段
子程序设计
过程定义 过程名 PROC …… RET 过程名 ENDP [类型]
;指令序列 ;过程返回指令
CALL DISPLAY
MOV AH, 4CH INT 21H
DISPLAY PROC
MOV DX, OFFSET MESSAGE MOV AX, SEG MESSAGE MOV DS, AX MOV AH, 9 INT 21H
RET DISPLAY ENDP
CSEG ENDS END START
过程调用 远程调用 CALL FAR PTR 过程名
分支结构
IF … THEN … ELSE
TEST AX, 1 Y N 条件 程序段N LN: JZ LY …...
程序段Y
JMP L0 LY: …… …... 构
IF … THEN
TEST AX, 1 N Y 条件 JZ LY LN: …... LY: …… …...
•将当前CS寄存器内容进栈(保存CALL下一 条指令的段地址) •将当前IP寄存器内容进栈(保存CALL下一 条指令的偏移地址) •将被调用过程的偏移地址送IP寄存器,段地 址送CS寄存器,控制程序转移到该过程
DATA SEGMENT MESSAGE DB "Hello world!",0DH,0AH,"$" DATA ENDS SSEG SEGMENT STACK DB 100 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DATA,SS:SSEG START: MOV AX, DATA MOV DS, AX
实模式汇编语言源程序的结构——完整的段定义
DATA SEGMENT …... DATA ENDS STACK SEGMENT STACK …... STACK ENDS CODE SEGMENT ASSUME DS:DATA, SS:STACK, CS:CODE START: ……
CODE
ENDS END START
•ASSUME语句习惯上作为代码段的第一条指令 •ASSUME语句是非执行性的伪指令,段寄存器 的初值必须在程序中用指令设置。
CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG MOV AX, DSEG MOV DS, AX …...
•对CS的赋值由操作系统装入EXE文件时自动 完成
循环控制: 计数控制 LOOP/... 条件控制 JZ/... 例:计算1+2+3+…+100 MOV AX, 0 MOV BX, 0 MOV CX, 64H INC BX ADD AX, BX LOOP SUM
SUM:
例:从1开始累加,直到和大于10000为止,统 计被累加的整数个数 MOV AX, 0 MOV BX, 0 MOV CX, 0H INC BX ADD AX, BX INC CX CMP AX,2710H JLE SUM
汇编语言的基本语法
常量 数值常量, 01000101B, 32, 0F1D4H 符号常量(用EQU或=定义) 变量 内存单元的名字,由DB/DW/DD/DQ/DT定义 标号 指令存放单元的符号地址,是转移/调用/循环 指令的操作数
指令语句 执行性的语句,汇编时汇编程序将其转换成 机器目标代码 标号: 指令助记符 操作数 ;注释 伪指令语句 说明性的语句,为汇编程序提供进行汇编所 需要的有关信息,如定义符号、分配存储单 元等,不生成目标代码 名字 伪操作命令 操作数 ;注释
相关主题