关于本次阅读后的思考
第三章
1 DS 数据段寄存器一次读取2个存储单元,CS是指令段寄存器
2 栈是先进后出,栈寄存器SS:SP 每次都是先进行SP+-=2 然后再进行PUSH或者POP的,切记先SP计算
3 栈其实也是一种写入数据的方式,可以理解为MOV,只不过SS:SP默认会有内存地址。
第四章
1 下载MASM5.0工具,
执行masm.exe后关联上源文件生成.OBJ文件
执行link.exe后关联上刚生成的OBJ文件生成.EXE文件
执行.EXE文件
edit--test.asm----masm---test.obj----link----test.exe----run
2 通过DEBUG FILE执行单步调试
指令 -t
当int 21h时使用-p结束
第5、6章
代码的框架
assume cs:code code segment dw XXXXXXXXXXXXXXXXXXX //数据层
..........
....... start : mov XXX //start 告知执行代码的入口 mov XXXX //代码层 mov XXXX mov ax,4c00h //结束写入 结束程序的时候默认写法 int 21h //结束程序的时候默认写法 code ends end start //代码结束的地方
第三章 寄存器
字
字是16位的所以在内存中需要2个单元来存放,且寄存器的高位对应高位地址,低位对应低位地址
DS寄存器
数据段地址寄存器
1 DS不能直接被送入数据,必须通过其他寄存器进行中转
例如 mov bx,1000h
mov ds,bx
mov al,[0] ---0处写偏移地址[]代表ds的段地址
栈
指令 POP PUSH
PUSH AX 表示把AX的值送入栈中
POP AX 表示把栈顶的值送入AX中
PUH/POP 寄存器/段寄存器/内存单元
栈是先进后出机制,以字为单位
栈地址是由高向低扩展
栈的寄存器
SS,SP
SS指向栈的段地址SP指向栈的偏移地址,永远指向栈顶sp+=2(注意:是先SP+-再PUSH或者PHP)
SS必须通过一般寄存器中转后送入值
如果000F为栈底,那么初始化的时候SP指向0010,有一个元素的时候是000E
个人理解
1 DS是数据段寄存器,一次读取2个存储单元
2 栈是先进后出,栈寄存器SS:SP 每次都是先进行SP+-=2 然后再进行PUSH或者POP的,切记先SP计算
3 栈其实也是一种写入数据的方式,可以理解为MOV,只不过SS:SP默认会有内存地址。
第四章 汇编程序
指令:
伪指令不被系统执行
汇编指令被翻译成机器代码被执行
简单代码
assume cs:abc abc segment mov ax,2 add ax,ax add ax,ax
mov ax,4c00H
int 21H abc ends end
执行源程序
1 通过MASM5.0执行
edit--test.asm----masm---test.obj----link----test.exe----run
2 通过DEBUG FILE执行单步调试 -t 当int 21h时使用-p结束
个人理解
1 下载MASM5.0工具,
执行masm.exe后关联上源文件生成.OBJ文件
执行link.exe后关联上刚生成的OBJ文件生成.EXE文件
执行.EXE文件
edit--test.asm----masm---test.obj----link----test.exe----run
2 通过DEBUG FILE执行单步调试
指令 -t
当int 21h时使用-p结束
第五、六章 汇编程序II
LOOP指令
执行和CX有关,每次执行都会(CX)=(CX)-1
语法是先制定一个地址S:XXXXXX LOOP S
要点 CX决定+LOOP决定循环 S标记循环的地址
mov cx 11
s: add ax,ax
add ax,bx
loop s
以上程序执行11次
[BX]
这个指令由于DEBUG和MASM解释的有歧义
MOV AX,[0] DEBUG是将DS:0的值放入AX,MASM则是把0送入AX
所以写编码的时候用 MOV AX,DS:[0]
例1
累加5个数字
0123H,123H,312H,2131H,231H
assume cs:code
code segment
dw 0123H,123H,312H,2131H,231H //在代码的初始位置上先定义数据,试数据能够初始化在0.2.4.6
start : mov ax,0 //start 告知执行代码的入口
mov bx,0
mov cx,5
s: add ax,cs:[bx] //AX累加CS指向的0.2.4.6
add bx,2
loop
mov ax,4c00h //结束程序的时候默认写法
int 21h //结束程序的时候默认写法
code ends
end start //代码结束的地方
个人理解
代码的框架
assume cs:code code segment dw XXXXXXXXXXXXXXXXXXX //数据层
..........
....... start : mov XXX //start 告知执行代码的入口 mov XXXX //代码层 mov XXXX mov ax,4c00h //结束写入 结束程序的时候默认写法 int 21h //结束程序的时候默认写法 code ends end start //代码结束的地方