看一个简单的hello world 程序
data segment ;定义数据段,数据存放的地方,segment表段的开始,ends结束,data为段名,编译后变为地址
tab db 'hello world$' ;定义变量 汇编定义变量的格式为【变量名】【变量类型】【数值列表】
;变量类型有db(字节,字符串存储必须用这个)dw(字,即两字节)
;dd(双字)数值列表用逗号隔开,字符串单引号和双引号均可
;$可用作串结束符 ,也可代表当前地址
data ends
code segment ;代码段
assume cs:code, ds:data ;假设某一段寄存器和程序的某一个段关联
start: mov ax,data
mov ds,ax
lea dx,tab ;LEA指令可以将后者(可为数,变量名、标号或地址表达式)
;的地址传送到指定的的16位通用寄存器
mov ah,9h ;这两句是实现DOS调用中的09号功能,就是在屏幕上显示字符串
int 21h
mov ah,4ch ;程序返回
int 21h
code ends
end start ;表明汇编程序结束,不同于ends
使用debug简介:
打开dosbox输入:
mount c D:\download //那个D:\download 路径自己指定,只要里面包含了masm.exe等程序就行了
c: //打开c盘,实际是打开刚才指定的目录
到masm目录里,在里面存放1.asm(要运行调试的汇编程序)输入masm 1.asm 一直回车
没错误的话,继续输入link 1.obj 一直回车,就生成了1.exe 如果想要直接运行1.exe 就输入1.exe就行了
若要用debug则输入 debug 1.exe 此时debug将1.exe加载入内存,就可以用debug命令进行程序的调试了
以下讲解常用命令的使用:
r命令:r可看到寄存器的值,r 寄存器名 可以修改寄存器的值
汇编局部变量和全局变量:
全局变量和局部变量的体现是通过栈来实现的,即:
全局变量保存在数据段中,即伪代码中声明的DATA SEGMENT,任何时刻都能调用。
而局部变量则保存在栈段中,是伪代码中声明的STACK SEGMENT,平时不调用,
调用中断时把局部变量从栈里取出来