概述
一段语法方面五脏俱全的代码
assume cs:code, ds:data, ss:stack
stack segment
; 自定义栈段容量
db 100 dup(0)
stack ends
data segment
db 100 dup(0)
data ends
code segment
start:
mov ax, stack
mov ss, ax
mov ax, data
mov ds, ax
mov ax, 1122h
push ax
pop bx
mov ax, 4c00h
int 21h
code ends
end start
语法:
汇编语言指令分为2类:
汇编指令:如mov、add、sub等
由对应的机器指令,可以被编译为机器指令,最终由CPU执行
伪指令:如assume、segment、ends、end等
没有对应的机器指令,由编译器解析,最终不被CPU执行
segment and ends
其中segment和ends的作用是定义一个栈,segment表示段的开始,ends代表段结束
段名 segment
;;;;
段名 ends
段名可以随意定义,要符合可阅读的准则。一个有意义的汇编程序中,至少要有一个段作为代码段放置代码。
assume
assume的作用是将代码段和mycode段和CPU中的CS寄存器关联起来。
end
end代码程序的结束,编译器遇到end就会结束编译
db dw dup定义
db dw用于定义数据 dup用于批量定义:
db 0h ;定义一个byte的数据,值为00h 无标识
dw 0h ;定义一个word的数据, 值为0000h 无标识
a db 07h ;定义一个byte的数据,值为07h 让标识a指向这个字节
a db 'h' ;定义一个byte的属于,值为字符'h'的ascii码,让标识a指向这个字节
b DB 'Hello', 0
a db 48h, 65h, 6Ch, 6Ch, 6Fh, 00h ;定义数组并初始化
可以作如下引用:
MOV AL, a[3]
也可以用指针和变址寄存器(BX, SI, DI, BP):
MOV SI, 3
MOV AL, a[SI]
如果你想定义一个具有一系列相同元素的数组可以用DUP关键字,如:
c DB 5 DUP(9)
与下面的效果相同:
c DB 9, 9, 9, 9, 9
d DB 5 DUP(1, 2)
相同于:
d DB 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
在数据段定义数据相当于创建全局变量
在栈段定义数据相当于指定栈的大小
代码段一般不会这样定义数据
其他指令DW,DD,DQ,DT与之大致相同
DW(DEFINE WORD)定义一个字(两个字节)长度
DD(DEFINE DOUBLE WORD)定义双字(4个字节)长度
DQ(DEFINE QUARTET WORD)定义四字(8个字节)长度
DT(DEFINE TEN BYTE)定义十字节长度
最后
以上就是愤怒天空为你收集整理的汇编语言11---基本语法与分段的全部内容,希望文章能够帮你解决汇编语言11---基本语法与分段所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复