4.汇编程序
文章图片
文章图片
文章图片
伪指令 连接过程:伪指令不会被连接编译
文章图片
连接过程
文章图片
中断:
文章图片
文章图片
文章图片
在代码段中存放数据:
;伪代码 关联CS寄存器为code
assume cs:code;
与code ends一一对应
code segment;
在代码段寄存器中存放字型数据
dw 1122h, 3344h, 5566h
;
在代码段寄存器中存放10个重复值为0000h的字型数据
db 10 dup(0);标记程序执行入口,与end start是一一对应的
start:mov al, 0h
;
取CS段寄存器的数据1122h
mov bx, cs:[0]code ends
end start
打印hello world:
assume cs:code ds:data
;
数据段
data segment
;
$表示字符串结束
db 'hello world$'
data ends;
代码段
code segment
start:
;
手动设置关联ds的值,cs不需要手动设置是因为cs有start入口
mov ax,data
mov ds,ax;
打印字符串,需要把ds数据移动到dx中,ds字符串数据从0h开始
mov dx,0h
;
执行中断指令 ,9h关联为中断表中的打印字符串程序指令
mov ah, 9h
int 21h;
退出程序
mov ax,4c00h
;
执行中断指令
int 21hcode ends
end start
多段访问:
;
提醒开发者每个段的含义
assume cs:code, ds:data
;
----- 数据段 begin -----
data segment
age db 20h
no dw 30h
db 10 dup(6) ;
生成10个连续的6
string db 'Hello World!$'
data ends
;
----- 数据段 end ----- ;
----- 代码段 begin -----
code segment
start:
;
手动设置ds的值
mov ax, data
mov ds, axmov ax, no
mov bl, age;
打印
mov dx, offset string
;
offset string代表string的偏移地址
mov ah, 9h
int 21h ;
退出
mov ax, 4c00h
int 21h
code ends
;
----- 代码段 end -----;
编译结束,start是程序入口
;
start所在的段就是代码段
;
所以cs的值就是code段的段地址
;
相当于cs的值已经自动设置完毕
end start
【4.汇编程序】栈使用:
assume cs:code, ds:data, ss:stack;
栈段
stack segment
db 10 dup(8)
stack ends ;
数据段
data segment
db 20 dup(9)
data ends ;
代码段
code segment
start:
;
手动设置ss和ds
mov ax, stack
mov ss, ax
mov ax, data
mov ds, axmov ax, 1122h
mov bx, 3344hmov [0], ax;
使用栈
mov sp, 10
push ax
push bx
pop ax
pop bx;
退出
mov ax, 4c00h
int 21h
code endsend start
推荐阅读
- 宽容谁
- 一个人的旅行,三亚
- 第6.2章(设置属性)
- 布丽吉特,人生绝对的赢家
- 家乡的那条小河
- 讲述,美丽聪明的海欧!
- PMSJ寻平面设计师之现代(Hyundai)
- 夜游宫|夜游宫 心语
- 增长黑客的海盗法则
- 画画吗()