现在来看王爽的《汇编语言》的书籍,前面两章看起来蛮简单的,这里从第三章开始,把疑难点的写下来。
三、寄存器(内存访问)
1、内存中字的存储特点:字存储的时候占两个连续的存储单元。
2、段寄存器DS特点:给DS赋值时,需要通过普通寄存器或者内存单元来中转,而不能直接用数值赋值。
举例:mov ds 1000H //非法的
mov ax 1000H
mov ds ax //合法
3、汇编语言中【...】意义:中括号中的数值代表的是地址偏移量,而整个物理地址需要 段地址(DS)*16+偏移量=物理地址.
例如:mov al [5] //把地址 ds:5的数值传给al
4、寄存器和内存单元传送数据的一个规律:传送字数据的时候是两个字节的传送,即需要传送两个连续的内存单元数据。
例如:
地址 | 数据 |
10000 | 23 |
10001 | 45 |
10002 | 67 |
MOV DS AX //段地址赋值
MOV BX [0] //BX=4523H
MOV CX [1] //CX=6745H
5、栈存放数据的类型:存放函数的参数值和局部变量,由编译器自动操作的。
6、栈数据输出和输入的规律:LIFO(last in fist out)后进先出。
7、栈的特殊寄存器:SS 和SP ,即段寄存器和偏移量寄存器,通过这两个寄存器CPU就可以在内存中识别和取栈中的数据。
四、用汇编语言编写程序
1、编写程序的工具:edit、记事本
2、生成可执行文件的流程:用源文件编译生成目标文件,然后通过连接生成可执行文件。
3、可执行文件的内容:包含程序(编译成的机器码)和数据,以及一些描述信息(所占内存)
4、汇编程序中有end 和ends区别:end是编译结束的标志,故编译程序的最后都有个end,而ends则是某个段的结束。
七、更灵活的定位内存地址的方法
1、汇编语言中的大小写转换如何进行:因为大小写字母最终都是按照ASCII码表转换为二进制,这两者之间相差一个固定的值20H,所以可以根据这规律来转换。用二进制进行与或也可以的。
2、指针加偏移量【bx+data】的写法:这指针不是指段指针,是指偏移量的指针,这写法有三种:
mov ax,[bx+200]
mov ax,200[bx]
mov ax,[bx].200
八、数据处理的两个基本问题:
1、用作偏移量的寄存器有几种:BX、bp、si、di
2、数据存储的位置:内存(代码段+数据段+堆栈段)、cpu内部(寄存器+缓冲器)、端口
3、数据位置的表达:偏移量为idata、bx、si、di一般为数据段中,而BP的话一般在堆栈段中。