记一波汇编考前突击

2020-11-24  本文已影响0人  drenal

汇编问题列表

(1)8086CPU是多少位的?寄存器有哪些?名称是什么?

共计14个寄存器

(2)8086CPU的内存分段机制是什么?内存真的分段了吗?

(3)总线分几种?不同总线的根数代表什么?

(4)内存地址空间是什么?特点是什么?

(5)地址加法器的作用是什么?

地址是20位的,寄存器是16位的,地址加法器将短地址左移4位(乘10H或16D)再加上偏移地址形成20位物理地址。

(6)8086CPU是如何执行指令的?

指令放在内存里,一条接着一条,CPU自己按顺序取出并且执行。

(7)汇编语言是编译性语言还是解释性语言?汇编语言由哪几种部分构成?

(8)bochsdbg调试时用到的命令有哪些?都怎么使用?

以下仅整理常用命令,具有强烈主观色彩。

类型 命令 功能 举例
中断 b 加入断点,后接物理地址 b 0x7c00
blist 显示现有断点
d 删除断点
执行控制 c 继续执行(continue)
p或n 单步执行(遇到 call 和 int 不进入函数、中断内)
s 单步执行(遇到 call 和 int 进入函数、中断内),后面可以加执行条数 s/s 100
查看寄存器 r 显示寄存器状态
sreg 显示段寄存器状态
info eflags 显示标志位寄存器,如果字母为大写表示该位置状态1,否则为0
查看内存 xp 显示内存内容,后接想要显示的多少,单位,以及物理地址。b为字节,h为字,w为双字 xp /2b 0x7c00
print-stack 查看堆栈
u 反汇编,后接行数和物理地址 u /10 0x7c00
退出 q或quit或exit 停止调试并退出

(9)硬盘的CHS、LBA是什么?两者转化的公式是什么?

//TODO

(10)80*25彩色字符模式如何使用?其编程的一般套路是什么?

(11)内存的串拷贝(rep movsb/movsw)是如何实现的?

(13)mul和div的实现过程是什么?(共4种)

8位乘法:

mul bl ; mul byte ptr [bx]

16位乘法:

mul bx ; mul word ptr [bx]

16位除法:

div bl ; div byte ptr [bx]
32位除法:

div bx ; div word ptr [bx]

(14)标志位zf、of、cf、pf、sf、df、tf、if、af的作用是什么?是否会判断前5个的值?

标志位 0含义 1含义 备注
ZF(Zero flag)零标志位 运算结果为1 运算结果为0
OF(Overflow flag)溢出标志位 计算结果没有溢出 符号相同的相加符号变的不一样就溢出 ,符号不同的相减与被减数符号不一样就溢出 只对有符号数而言
CF(Carry flag)进位借位标志位 最高位没有产生进位借位 前面的计算中最高位产生进位借位 移位操作中保存最高位或最低位溢出的数字
PF(Parity flag)奇偶标志位 计算结果有奇数个1 计算结果有偶数个1 结果的低八位
SF(Sign flag)符号标志位 计算结果为非负 计算结果为负
DF(Direction flag)方向标志位 正向 反向 与rep,movesb等配合使用
AF(Auxiliary flag)辅助进位借位标志位 低四位没有向高四位借位 低四位向高四位借位

IF, TF 不考,先不写了。

(15)loop循环是如何实现的?

先让 CX 自减1,再判断 CX 是否为0,如果为0则跳转至 loop 后面标明的标号。

(16)jcc语句如何使用?

《x86汇编语言-从实模式到保护模式》第91页表6-1,这玩意儿太多了懒得打。

(17)是否会使用loop或jcc实现一重或二重循环?能否写出程序框架?

会,能。(怠惰中......)

(18)db、dw、dd等作用是什么?times呢?

定义一个以字节为单位的变量。

定义一个以字为单位的变量。

定义一个以双字为单位的变量。

重复n次后面的语句。

(19)and、or、xor、not的作用是什么?怎么用?

按位清零。

假如,想要将 000010101B 的位0清零,我们只需要给他 and 上 11111110B 就可以了。

按位置一

假如,想要将 000010101B 的位7清零,我们只需要给他 or 上10000000B 就可以了。

如果某相同位置上的两个数字同为1或0,则清零,如果不一样则置一。

按位取反,是0变1,是1变0。

(20)栈如何使用?push和pop如何实现?空栈和满栈怎么设置(即sp的值是多少)?

先一顿操作初始化栈段和栈顶。

mov ax,段地址
mov ss,ax
mov sp,偏移地址 

空栈设置 SP 为0

满栈设置 SP 为1

(21)8086寻址方式有哪些?能否举出一句汇编语句的例子?

操作的数位于寄存器中,可以直接从寄存器里取得。

mov ax, cx
add bx, 0xf000
inc dx

指令的操作数是一个立即数。

add bx, 0xf000
mov dx, label_a

(22)JMP语句分为几种?都是如何实现的?

//TODO

(23)如何实现子程序的调用?其过程是什么?

//TODO

(24)中断类型码、中断向量、中断向量表、中断例程是什么?中断发生时CPU执行过程是什么?

//TODO

先罢工了!!


参考文献

标志寄存器总结

黑色星辰的课件儿

《x86汇编语言-从实模式到保护模式》

翔哥

上一篇 下一篇

猜你喜欢

热点阅读