汇编语言:程序建立处理、伪操作

目录

一、程序建立、处理 

源程序(.asm) -> 汇编程序ASM ->目标文件(.obj) -> 连接程序link(目标文件、库文件、其他目标文件) -> 可执行文件(.exe)

二、伪操作

段定义伪操作

完整段定义​​​​​​​

储存模型与简化段定义

段组定义

开始伪操作 

结束伪操作

数据定义、储存器分配伪操作 

操作格式

助记符Mnemonic类型

操作数Operand用法

变量的类型属性

其他数据定义、储存器分配 伪操作

ptr、label 伪操作

equ 伪操作

地址计数器与对准伪操作

地址计数器 $ 

ORG伪操作

EVEN伪操作

ALIGN伪操作


一、程序建立、处理 

源程序(.asm) -> 汇编程序ASM ->目标文件(.obj) -> 连接程序link(目标文件、库文件、其他目标文件) -> 可执行文件(.exe)

二、伪操作

段定义伪操作

完整段定义​​​​​​​

data1 segment
    ...
data1 ends
    ...
data2 segment
    ...
data2 ends
codes segment
        assmue cs:code,ds:data1,es:data2
start:
        mov ax,data1
        mov ds,ax
        mov ax,data2
        mov es,ax
codes ends
end start

储存模型与简化段定义

    .model small
    .stack 100h
    .const

    .data
    ...

    .code
start:
    mov ax,@data
    mov ds,ax
    ...

段组定义

dseg1 segment word public 'data'
dseg1 ends
dseg2 segment word public 'data'
dseg2 ends
datagruop group dseg1,dseg2
cseg segment para public 'code'
    assume cs:cseg,ds:datagroup
start:
    mov ax,datagroup
    mov ds,ax
    ...
cseg ends
end start

开始伪操作 

name xx         ;程序将以给出的xx作为模块名(这个能干嘛啊)

title xx            ;可指定列表文件的每一页上打印的标题xx(这个能干嘛啊)

结束伪操作

end [label]       ;label是指示程序开始执行的起始地址

                          ;多个程序模块相连,只有主程序需要编号(不理解,标号是什么)

                          ;汇编程序从start开始,遇到end结束汇编 

.exit [xx]           ;产生退出程序并返回操作系统的代码,xx为给操作系统的数值,默认 0

.startup            ;masm6中,程序中用了stratup,则end伪操作不必指定程序入口点标号

...

.exit 0

end 

数据定义、储存器分配伪操作 

操作格式

[xx](变量名字,可以没有)  Mnemonic(助记符) Operand(操作数)

助记符Mnemonic类型

类型dbdwdd...
大小8bits:4c2bites:8c 092words

...​​​​​​​

​​​​​​​​​​​​​​其他定义:df(6bites)、dt(10bites)

                     dq(4words)

操作数Operand用法

a db 5ch                                ;直接给数字

db xx,DUP(Operand)           ; xx是重复次数,dup里的括号放操作数Operand,可嵌套

                                               ;名字是可以忽略的,所以不打 a 了

db 0,?,0                                 ;?的作用是保留储存空间但不装入数据

变量的类型属性

·变量,名字是 xx,类型是Mnemonic,内容看Operand

·伪操作变量的值,是数据第一个数据项在当前段内第一个字节的偏移地址(例如,段定义里只有一句话:abc dw 24ac h,则可推出abc的值为 0 ,当前数据段内abc的第一个字节在段首,偏移为 0 )

·类型属性表示每个数据项的长度, db 为 1

·寄存器相对寻址,+1到下一个字节,+2到下个字

其他数据定义、储存器分配 伪操作

ptr、label 伪操作

byte /word /fword /qword /tbyte  PTR   xx                           ;指定操作数xx类型属性

xx LABEL byte /word /fword /qword /tbyte                          ;定义变量xx类型属性

equ 伪操作

xx equ 数值 /地址                                                                   ;把 数值 /地址在后面用 xx 代替

;数值可以为直接的256、b equ 4 代替的 b - 2

;地址可以为变量段内偏移的地址a、变址地址[bp + 8]、加段前缀的变址 ds:[...] 

地址计数器与对准伪操作

地址计数器 $ 

·表示正在或即将汇编的指令的首地址,初始为 0 ,每处理完一条指令,$ 的值就会增加上 该指令所占的字节数

·直接用 $ 可以引用地址计数器的值

· $ 在指令中,表示该指令首地址

· $ 在伪操作的参数中,表示 $ 的当前值

ORG伪操作

设置当前地址计数器的值

datas segment

        org 10

        vect1 dw 47a5h                        ;vect1 的偏移地址为0ah

datas ends 

EVEN伪操作

...

even                                                     ; 下一个变量或指令的偏移地址为偶地址

...

ALIGN伪操作

...

align 4                                                 ;下一个变量指令的偏移地址为 4 的倍速 

...

align 2                                                 ;等价于even伪操作

...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值