汇编语言-环境搭建(32位)

时间:2022-09-20 01:17:14

一 系统环境

  win7 旗舰版 x86_64

二 安装IDE

  RadASM.v2.2.1.9.cao_cong

三 MASM中的一些不太好记的用法

1 dup

主要用在开辟空间, 赋初值方面. 

dup的使用格式如下:
db 重复的次数 dup (重复的字节型数据)。
dw 重复的次数 dup (重复的字型数据)。
dd 重复的次数 dup (重复的双字数据)。

db 3 dup (0):定义了3个字节,它们的值都是0,相当于db 0, 0, 0。

db 3 dup (0,1,2);定义了9个字节,它们是0,1,2,0,1,2,0,1,2,相当于:db 0,1,2,0,1,2,0,1,2。

2 全局字符串需要显示添加'\0' 结尾,并且没有转义字符

eg: str1 db "phone book is full!",0dh,0ah,0

四 目前在这个版本中遇到的坑

  1 这个IDE的光标对中文兼容性不太好, 当调大编辑区的字体, 或者调整tab的显式空格数的时候, 有可能会出现光标跟当前的字符出现一段距离的bug

  2 变量类型在".data"区可以使用缩写, 在.code区只能使用类型名的全称

  3 关于"offset 变量名"与 "lea register, 变量名"(个人理解, 可能不准确)

  (1) 变量名 代表变量所在的内存单元的值(长度取决于你声明的类型)

  (2) offset 变量名, 表示取变量名相对于起始位置的偏移值, 就是" DS:[XX]" 里面的XX, 简单来说就是c++里面取地址的意思, 返回的是一个立即数

  (3) lea register,变量名(或者 lea register,[变量名]) 都是将变量名所在段的偏移地址赋值给register, 等价于 mov register, offset 变量名, 这个用法比较别扭, 建议不要使用lea取地址这种用法

  4 scanf的坑

    在读取使用%d 读取一个整数的时候, 键盘输入字母, 会出现令人抓狂的现象

  5 在radasm中使用的标准类库跟vs里面的标准类库的关系

    两者没有半毛钱的关系, 两者里面名字相似的函数的行为细节不完全一样, 不如scanf