我是靠谱客的博主 愤怒天空,这篇文章主要介绍汇编语言11---基本语法与分段,现在分享给大家,希望可以做个参考。

一段语法方面五脏俱全的代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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代表段结束

复制代码
1
2
3
4
段名 segment ;;;; 段名 ends

段名可以随意定义,要符合可阅读的准则。一个有意义的汇编程序中,至少要有一个段作为代码段放置代码。

assume

assume的作用是将代码段和mycode段和CPU中的CS寄存器关联起来。

end

end代码程序的结束,编译器遇到end就会结束编译

db dw dup定义

db dw用于定义数据 dup用于批量定义:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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---基本语法与分段内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部