16位汇编复习
王爽第三版根据课后练习题顺序,结合课本阅读效果更佳,简单的问题不再指出
本人才疏学浅,不能保证全部所写正确性,有错请指出。
1.1
CPU的寻址能力是由地址总线决定的,一个地址总线宽度对应一个内存单元。8086有20根地址总线,
CPU数据总线一根传一个bit,8086为16根数据总线,一次传输两个字节。数据总线与寄存器,处理位数相同,对应我们之后学到的最大处理数据指定:word ptr。
在存储器中数据和程序以二进制码存放,我们用-d查看内存时,用16进制数显示,每个字节空一格。
2.2
段地址与偏移地址
物理地址=段地址x16+偏移地址
8086有20根地址总线,这就是它为什么用两个16位的段地址和偏移地址来合成一个20位的物理地址的原因。
2.3
任意时刻CS:IP指向CPU将要执行的下一步操作,课后练习中有三条指令,因为第三条jmp修改了IP,所以共执行了四次。
jmp指令(注意jmp是一个汇编指令,不能在debug中使用,与考试无关。)
**jmp 段地址:偏移地址 ** 同时修改CS:IP
**jmp 寄存器名 ** 只修改IP 等同于 MOV IP,寄存器名
第二章实验
e命令用来写入机器码 a写汇编指令,写完后用r指令把CS与IP修改到写入指令处,用t命令执行即可。
-r 查看和改变CPU寄存器的内容:
-r ax 后按下enter键将出现:提示输入,输入内容即可改变ax寄存器的内容。
-d 查看内存中的内容:
-d 1000:0 意思就是查看内容地址为10000h-10070h内存中的内容。
-d 1000:0 9查看1000:0-1000:9单元中的内容
-d 1000:10 10查看1000:10内存中的内容
-e 改写内存中的命令:
-e 1000:0 1 'a' 2 'b' 3 'c'
向1000:0 1000:2 1000:4单元中写入1,2,3, 向1000:1 1000:3 1000:5单元中写入"a" "b" "c"。
-u 将内存中的机器指令翻译成汇编指令:
-u 1000:0
-t 执行一条机器指令:
执行cs:ip所指向的指令
-a 以汇编指令的格式在内存中写入一条机器指令
3.1
多注意内存中的高位与低位位置。
栈的push与pop
SS:SP
3.7
栈的段地址ss,是一个段寄存器(所有段寄存器都不能直接赋值),我们需要一个寄存器来中转。
寄存器reg:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di;
段寄存器sreg:ds,ss,cs,es;
……