4.汇编程序

4.汇编程序
文章图片
4.汇编程序
文章图片
4.汇编程序
文章图片
伪指令 连接过程:伪指令不会被连接编译

4.汇编程序
文章图片
连接过程 4.汇编程序
文章图片
中断:

4.汇编程序
文章图片
4.汇编程序
文章图片
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

    推荐阅读