汇编程序学习

时间:2022-07-25 00:55:11

看一个简单的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,平时不调用,

调用中断时把局部变量从栈里取出来