16位汇编 05
>> 环境配置
** xp环境配置
1:拷贝masm615到指定目录
2:将masm615目录添加到环境变量
3:在cmd中输入ml, 可以识别即配置成功
** dosbox环境配置
1:拷贝msam611到指定目录
2:将msam611所在目录添加进dosbox
3: 将msam611目录在dosbox中添加进环境变量
4:在cmd中输入ml, 可以识别即配置成功
** 编译命令
ml /c asm文件.asm
link asm文件.obj
** 编译+调试 脚本
ml /c %1.acm
link %1.obj
debug %1.exe
>> 入口和段
>> 入口:
1:入口点指定使用关键字end, 后面跟标号名
2:入口点可以写在任意的段外面, 但一般写在文件末尾
例如: 下面start (标号)就是一个入口点

其中end start 可以放在最下面, 也可以放在最上面,或者中间, 就是不能放在
XXX_seg segment 和 XXX_seg ends中间

>> 段
1:一个程序必须至少有一个段
2: 一个程序中可以定义多个段

3:段不能嵌套
4:段可以重名, 重名的段会被编译到同一块内存中

>> 注释
1: 汇编中使用分号“;” 来标注行注释
;这里是注释
mov ax, bx; 这里是注释
只有行注释,没有块注释
>> 常量
>> 整数
1:数值可以支持多个进制
2:数值必须以数字开头, 如果非数字, 前面必须加0
3:负数前面可以加减号(-)

示例:

>> 字符常量
1:字符可以用单引号(' ')或者双引号(" ")
例如:mov byte ptr [bx], '$'
没有字符串常量
>> 变量
>> 整数
1:整数可以支持多个类型 - 类型指的是数据的宽度(byte, word, dword, qword)
2:整数可以有多个初值, 未初始化的值用问号(?)表示
3:变量一般定义在一个单独的段中

示例:

>> 字符串
1:字符串都可以用单引号或者双引号
2:字符串一般以美元符号($)结尾

>> 数组

>> 堆栈段赋值
第一种方式:

第二种方式:
在定义堆栈段开始的而地方, 后面加上 stack


>> 属性

示例:
movaxmovaxmovaxleaaxmovaxmovaxmovax
>> 访问结构体
assume ds:data_seg
上面一行代码是访问结构体需要用到的
assume ds:data_seg mov ax, data_seg mov bx, g_dw mov bx, offset g_dw
上面 mov bx, g_dw计算data_seg数据段中g_dw变量的段内偏移
上面数据类型db, dw,dd, dq, assume
等等称为伪指令
要想访问数据段里面的变量,要在前面声明具体的数据段,
示例:
assumedsmovax
上面的一行代码相当于命名空间的问题
>> 数据段寄存器赋值
程序执行后, 段寄存器里面的初始值除了CS代码段的值的可靠的, 其他几个段寄存器的初始值不可靠。
所以代码段里要给数据段寄存器赋值

示例代码: stack_seg segment stack db 256 dup(0cch) stack_seg ends data_seg segment g_db db 56h g_dw dw 6666h g_dd dd 777777h g_dq dq 888888888h g_dt dd 999999h d_db db "hello world$" data_seg ends data_seg1 segment g_ary1 dw 5566h, 7788h, 9966h g_ary2 dw 10h dup(6666h) g_ary3 dw 9999h, 16 dup(7777h), 4455h, 16 dup(3322h) data_seg1 ends code_seg segment start: ;给数据段赋值 mov ax, data_seg mov ds, ax assume ds:data_seg mov ax, g_dw ;给堆栈段赋值 assume ds:stack_seg mov ax, stack_seg mov ss, ax ;堆栈段寄存器,保存堆栈段段基址 mov sp, 255 ;堆栈指针寄存器, 指向栈底 mov ah, 4ch mov al, 0 int 21h code_seg ends end start
>> 调用dos功能号

这些功能函数都是0x21中断号里面的
AH寄存器里面存放功能号,其他寄存器里面存放参数
程序正常退出, 并且带退出码:

0x4c功能号为,退出程序功能号
输出字符:
功能号:2

输出字符串:
功能号:9

从键盘输入字符, 回显
功能号: 1

从键盘输入字符, 无回显
功能号: 7

输入字符串:
功能号:a



浙公网安备 33010602011771号