汇编语言
文章平均质量分 53
提供基础的汇编语言程序设计方法
三境界
九层之台起于垒土
展开
-
汇编语言 --- 32位x86处理器架构
汇编原创 2022-10-09 17:36:22 · 977 阅读 · 0 评论 -
汇编 --- 过程调用 和 过程返回
汇编技术 过程调用 过程返回转载 2022-09-24 15:37:40 · 488 阅读 · 0 评论 -
Toy OS:Part 2: Read App From Hard Disk
操作系统基础原创 2022-09-21 09:48:34 · 134 阅读 · 0 评论 -
汇编常用寄存器以及寻址方式
x86汇编小速成原创 2022-09-18 20:25:10 · 973 阅读 · 0 评论 -
汇编 --- 用户程序的结构 和 程序加载
汇编原创 2022-09-14 18:21:59 · 240 阅读 · 0 评论 -
汇编 --- 汇编后的程序加载到内存中
汇编 程序如何放置到内存中原创 2022-08-28 21:35:55 · 299 阅读 · 0 评论 -
OS toy --- Part 1: Boot UI
汇编 操作系统原创 2022-08-24 15:37:28 · 142 阅读 · 0 评论 -
计算机基础 --- 负数问题
负数问题原创 2022-08-24 11:25:27 · 864 阅读 · 0 评论 -
AS86汇编语法
汇编AT&T原创 2022-08-09 20:19:26 · 501 阅读 · 0 评论 -
操作系统3---内嵌汇编 ( AT&T)
一,寄存器的使用发生了变化引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。常用寄存器汇总:8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp;8个16-bit寄存器,它们事实上是上面8个32-bit寄存器的低16位:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp;8个8-bit寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。它们事实上是寄存器%ax,%bx,%cx,%dx的高8位和原创 2021-11-08 21:33:16 · 1009 阅读 · 0 评论 -
汇编语言3---存储与传输以及硬件上的思考
计算机需要指令去执行动作,也需要数据作为计算的材料。在DOSBox中debug模式下可以看到指令与数据的存储情况,可以发现指令与数据是存放在一起的,并没有去做具体的划分。CPU是如何去区分指令和数据的呢?(挖坑,后面解释)另外,指令和数据是存放在哪里呢?一部分是放在CPU中,另一部分放在内存中,内存的一个具体载体之一就是内存条。CPU要从内存条中存取命令和读写数据应该要怎么做?如果你拆开过计算机的机箱并仔细观察,你就会发现CPU和内存条是插在同一块电路板上的,他们之间由许多印刷在电路板上的线路联结,这些通路原创 2021-10-24 22:43:27 · 74 阅读 · 0 评论 -
汇编语言11---基本语法与分段
一段语法方面五脏俱全的代码assume cs:code, ds:data, ss:stackstack segment ; 自定义栈段容量 db 100 dup(0)stack endsdata segment db 100 dup(0)data endscode segmentstart: mov ax, stack mov ss, ax mov ax, data mov ds, ax mov ax, 1122h原创 2021-10-31 15:09:27 · 859 阅读 · 0 评论 -
汇编语言10---寄存器总览
寄存器是CPU非常重要的部件,可以通过改变寄存器的值来实现对程序的控制。不同CPU的寄存器个数和结构一般都不相同,下面是8086CPU寄存器的结构,8086CPU有14个寄存器,所有寄存器都是16位的。CPU在对内存中的数据进行运算时,首先将内存中的数据存储到寄存器中,然后再对寄存器的数据进行运算。...原创 2021-10-31 00:05:57 · 158 阅读 · 0 评论 -
汇编语言6---DOSBox的使用
常用命令-g 执行完exe运行结果显示-a 编写汇编命令-t 单步执行-p 直接执行完不是单步执行-u 反编译-r 查看修改寄存器的值-d 查看内存单元-e 修改内存单元-? 查看指令帮助原创 2021-10-25 22:45:29 · 432 阅读 · 0 评论 -
汇编语言14---call-ret实现函数调用
无返回值的函数使用call和ret配合可以调用和返回一段其它位置的指令,相当于面向对象语言的中的函数调用:call将下一条指令的偏移地址入栈执行函数ret将栈顶的值出栈,赋值给IP带返回值的函数数据段是公用的,可以实现返回值函数用寄存器也可以实现,一般用ax寄存器作为返回值的存储寄存器带参数-返回值的函数可以用数据段实现传参数,但是最好不要这么做,因为参数数据是临时的,应该用完就释放掉可以使用栈或者使用寄存器...原创 2021-11-03 21:19:13 · 416 阅读 · 0 评论 -
汇编语言7---字型数据与字节型数据
首先要明确的8086有16根数据线和20根 地址线 ,它既能处理16位数据,也能处理8位数据。 可寻址的内存空间为1MB。字型数据与字节型数据8086cpu的数据线是16根,所以可以处理两种尺寸的数据.1. 字节型数据,byte 8bit存放到8位寄存器中。2. 字型数据, 2bytes=16bit, 存放到16寄存器中。在使用mov指令,要保证数据和寄存器之间位数的一致性。数据存放规则一个字型数据(如 1234H)存放在内存中,由2个连续的地址的内存单元组成。高地址内存单元存放字型数原创 2021-10-28 01:10:14 · 3905 阅读 · 0 评论 -
汇编语言4---加深对内存的理解
内存不仅包括内存条,还包括显存原创 2021-10-25 20:57:35 · 158 阅读 · 0 评论 -
汇编语言2---二进制和汇编语言的关系
一段简单的思考计算机大致是如何工作的?计算机由许多部件组成,他们需要组织在一起协作运行,就需要指令去告诉他们该怎么做。这些指令叫做机器指令(010010011101 B)。那么谁来执行这一串二进制数字呢?一个叫做CPU的部件,即中央处理器,他将一串二进制数字转化为高低电平,来驱动计算机运行。深入探讨其中的联系从DOSBox的debug功能中学习,观察debug模式下的输出信息输出信息基本的格式为:十六进制数字:某种编号 一段十六进制数 英语单词的简写 + 一些数字/标识其中:第三列十原创 2021-10-24 21:19:49 · 1334 阅读 · 0 评论 -
汇编语言8---栈
直观理解仓库,弹夹,书箱…等等,太多了。总之,FIFO从内存上理解入栈出栈操作操作栈最重要的就是操作栈顶的位置:入栈时把栈顶往上提,再把数据放到栈顶指向的位置上出站时把数据拿走,再把栈顶往下压一格8086中,用SS于SP所组成的栈顶内存地址作为栈顶指向,并且确定了出入栈的数据只能是16位数据Tips:生长方向:对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,他的生长方向是向下的,是向着内存地址减小的方向增长。所以入栈时SP减小push ax ;修原创 2021-10-28 01:42:50 · 1384 阅读 · 0 评论 -
汇编语言9---编译链接以及可执行文件
为什么需要分两步走,编译再链接(masm.exe / link.exe)编译 masm asm --> obj链接 link obj --> exe假设有100w行代码,编译需要花费一段时间(比方说5min)。如果代码有错误,修改过后要重新进行这个5min的过程,如果错误不能一次性解决,就会花费很多个这样的5min。可行的方法是:把100w行代码拆分开来,再分别编译为.obj:t1.asm — t1.objt2.asm — t2.obj…t1000.asm —t原创 2021-10-29 22:24:42 · 466 阅读 · 0 评论 -
汇编编程1----环境搭建
一,准备工具DOSBox + 编译调试工具(debug + MASM + LINK)注意事项DOSBox和编译调试工具最好不要安装在C盘,安装的路径上最好不要有空格和中文将下载好的编译调试工具放在asm文件夹下,该文件夹就是工作目录,要包含编译调试工具以及源代码,output文件也会放在里面。我DOSBox的路径位D:\DOSBox,asm的路径为D:\asm二,挂载我们需要将工作目录asm所在路径当作c盘目录(虚拟)运行DOSBox目录下的DOSBox 0.74-3 Options会打开一个原创 2021-10-23 23:31:48 · 662 阅读 · 0 评论 -
汇编语言13---其他指令
16位模式下:源地址是DS:SI,目的地址是ES:DI32位模式下:源地址是DS:ESI,目的地址是ES:EDIMOVSB, MOVSW, MOVSD作用:移动字符串数据,复制由ESI寄存器寻址的内存地址处的数据到EDI寻址的内存处MOVSB:传送一个字节,之后SI和DI加/减1MOVSW:传送一个字,之后SI和DI加/减2MOVSD:传送一个双字,之后SI和DI加/减4具体是加还是减取决于DF标志位:DF=0,表示正向传送,SI/DI加DF=1,表示反向传送,SI/DI减单独的mo原创 2021-11-02 20:46:06 · 1700 阅读 · 0 评论 -
汇编语言12---中断
中断机制; 将代码段寄存器和我们的代码段关联起来; 将数据段寄存器和我们的数据段关联起来; 注:这里的关联并没有任何实际操作,相当于给我们自己的注释而已; 相当于即使不写这一行也没有关系assume cs:code, ds:data ; 数据段开始data segment ; 创建字符串 ; 汇编打印字符串要在尾部用 $ 标记字符串的结束位置 ; 将字符串用hello做一个标记,方便后面使用它 hello db 'Hello World, Whip!$'原创 2021-10-31 16:06:55 · 939 阅读 · 0 评论 -
汇编语言5---数据寄存器与地址寄存器以及CPU取值执行过程
AX BX CX DXAX BX CX DX是CPU内部的四个16bit的通用寄存器,常用于存储数据,也叫数据寄存器,一般用于存放参与运算的数据或运算的结果。为了兼容更古老的CPU,他们的16bit可以分为高八位和第八位,如AH,AL。这种灵活的使用方法给编程带来极大的方便,既可以处理16位数据,也能处理8位数据。这四个数据寄存器除了作为通用寄存器使用外,还有各自的特殊功能:AX 寄存器称为累加器,常用于存放算术、逻辑运算中的操作数或结果。另外,所有的I/O指令都要使用累加器与外设接口传递数据。B原创 2021-10-26 08:48:01 · 2801 阅读 · 0 评论