-
汇编语言 3.8 3.9 栈顶超界问题 push pop
3.8 栈顶超界问题之前在3.6,3.7我们知道了8086CPU用SS和SP指示栈顶的地址,并提供push和pop指令实现入栈和出栈。在出栈或者入栈时,可能会出现超出栈空间的情况,如下所示:这里我们引入一个新的概念,栈空间。栈顶超界是危险的,因为栈空间之外的空间里很可能存放了具有其他用途的数据。CPU在执行push指令的时候考检测栈顶上线寄存器、在执行pop指令时候检测栈底寄存器保证不会超界。但8086CPU不具有这个功能,它只知道栈顶在何处(SS:SP指示),而不知道我们安排的栈空间的大...…
-
LA3.3 The Complete Solution to Ax=b
Simply show the Row Echelon Form R with b at the right sideAt the LA3.2, we didn’t pay much attention to the right side $b$, it is because $b$ is $0$ when we only talk about the nullspace of A.For now, in LA3.3, $b$ is not zero. As the Row Echelon...…
-
汇编语言 3.6 3.7 栈 CPU栈机制
3.6 栈栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。栈有两个基本的操作:入栈和出栈。入栈就是将新的元素放在栈顶,出栈就是从栈顶去除一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。栈的这种操作规则被称为:LIFO1 (Last In First out)。3.7 CPU提供的栈机制8086CPU最基本的两个入栈和出栈指令PUSH 和 POP。push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出数据送入ax...…
-
在mac或者linux运行debug的优雅解决方案
I want to run debug in mac or linux sys, however, debug is only designed for windows.There are two ways: Just install the win virtual box (Recommend) install DOS virtual box DOSBox hereFor the DOSBoxWhen you have installed the DOSBox, firstly mo...…
-
汇编语言 3.4 3.5 数据段 mov add sub
3.4 mov, add, sub指令mov 寄存器,数据 —> mov ax, 8mov 寄存器,寄存器 —> mov ax, bxmov 寄存器,内存单元 —> mov ax, [0]mov 内存单元,寄存器 —> mov [0], axmov 段寄存器,寄存器 —> mov ds, axmov 寄存器,段寄存器 —> mov ax, dsmov 内存单元,段寄存器—> mov [0], cs...…
-
汇编语言 3.1 3.2 3.3 内存中字的存储 DS [assdress] 字的传送
第二章中,主要讲CPU如何执行指令的角度讲解了8086的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。这一章将从访问内存的角度继续学习几个寄存器。3.1 内存中字的存储 0 20H 1 4EH 2 12H 3 00H 4 4 本例中,我们用0、1两个内存...…
-
汇编语言 Debug的用法
什么是DebugDebug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在及其码级跟踪程序的运行。Debug的使用 R命令查看、改变CPU寄存器的内容; D命令查看内存中的内容; E命令改写内存中的内容; U命令将内存中的机器指令翻译成汇编指令; T命令执行一条机器指令; A命令以汇编指令的格式在内存中写入一条及其指令。指令详解 R命令:-rAX=0000 BX=0000 CX=0000 DX...…
-
汇编语言 2.9 2.10 2.11 2.12 段寄存器,CS IP,代码段
2.9 段寄存器8086CPU在访问内存时,要由相关部件提供内存单元的段地址和偏移地址,送入加法器合成物理地址。8086CPU中有四个段寄存器: CS, DS, SS, ES2.10 CS 和 IPCS和IP是8086CPU中两个最关键的寄存器。 CS为代码段寄存器, IP为指令指针寄存器(偏移地址寄存器)。8086机中,任意时刻,CPU将CS:IP指向的内容当做指令执行。过程如下: 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器; IP=IP+所读取指令的长度,从而...…
-
汇编语言 2.8 段的概念
2.8 段的概念段只是我们主观认为的,CPU在识别内存时都只认识一整条段!在编程时可以根据需要,将若干地址的内存单元看做一个段,用段地址x16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位,16位寻址能力为64KB,所以一个段的长度最大值为64KB。CPU可以用不同的段地址和偏移地址形成同一个物理地址。偏移地址为16位,变化范围为0~FFFFH, 仅用偏移地址来寻址最多可寻64KB个内存单元。可以根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。…
-
About the Strang LA notebook
I have uploaded the related notes to the github as PDF. Get it as you need!…