汇编语言
不会汇编的程序员能说是程序员,从零开始学汇编
ysywon
这个作者很懒,什么都没留下…
展开
-
汇编语言-中断处理程序及其结构
因为CPU随时都可能检测到中断信息,所以中断处理程序必须常驻内存(一直在内存某段空间中中)中断处理程序的入口地址,即中断向量,必须存储在对应的中断向量表表项中(0000:0000-0000:03FF)。8086支持256个中断(0000:0000~0000:03FF,十进制刚好是1024,即1K的空间),但实际上系统中要处理的中断事件远远没有达到256个。先编译并执行程序,将中断程序写入内存,然后用debug进行除0测试。例子用0:200H来存放中断处理程序。A. 取得中断类型码N;原创 2023-07-19 21:35:12 · 384 阅读 · 0 评论 -
汇编语言-操作显存数据
B. 显存地址空间:A0000-BFFFF,128K,其中B8000H~BFFFFH共32K的空间是80列 * 25行彩色字符模式第 0页的显示缓冲区。02转为二进制就是:0000 0010,1代表G,也就是green,所以显示为黑底绿色。RGB(111)为白色,RGB(000)为黑色。C. 各类ROM地址空间:C0000-FFFFF,256K。A. 主存储器地址空间:00000-9FFFF,640K。解决:十六进制41就是字符A,占低位字节。G. 编程序,在屏幕的中间显示白底蓝字。原创 2023-07-17 22:43:30 · 405 阅读 · 0 评论 -
汇编语言-实现除法与乘法
分析:100001D=186A1H,100D=64H,被除数大于16位,需要用2个寄存器,将1放在DX中,将86A1放在AX中,示例3:在内存单元中使用除法,用div计算data段中第一个数据除以第二个数据后的结果,商存放在第3个数据的内存单元中。示例1:计算100 * 10,分析:100和10小于8位(255),可以做8位乘法,注意在debug中默认是十六进制。分析:1001D = 03E9H,100D= 64H,用一个寄存器即可,被除数放在AX中。除数:8位或16位,在寄存器或内存单元中。原创 2023-07-15 21:28:12 · 1295 阅读 · 0 评论 -
汇编语言-call和ret指令设置栈详解
A. 从下面一幅图看出,CALL指令要转到地址是:0013,位移是:E80500,读作:00 05,下一条指令偏移地址是:0E(076B:000E偏移地址取低位8字节),十六进制相加:05 + 0E = 0013。C. 执行CALL会把IP压栈,即把call下一条指令的偏移地址压栈,从图中可以看出,未执行call指定前,地址最后2位是一个随机数 01 A3,执行压栈后,最后2位是 00 0E。B. 用指令:g 000B 直接执行到 076B:000B处,可以看到IP变成了 000B。原创 2023-07-15 15:55:25 · 295 阅读 · 0 评论 -
汇编语言-操作符offset
示例2:将s处的一条指令复制到s0处。作用:取得标号的偏移地址。格式:offset 标号。用debug 看结果。原创 2023-07-15 10:32:29 · 1650 阅读 · 1 评论 -
汇编语言loop使用实例
Loop示例2:计算ffff:0006字节单元中的数乘以3,结果存储在dx中,先将内存中数据取出,连加3次,相当于乘以3。原创 2023-07-09 17:17:54 · 44 阅读 · 0 评论 -
汇编语言-在代码段中定义数据
A. dw:define word,定义一个字,2字节,表示定义字型数据。C. dd:define double 定义一个双字。B. db:define byte,定义一个字节。证明CS段,偏移地址为0000的数据为0123。3 编译链接成t2.exe后查看汇编代码。2 写好代码后,保存为t2.asm。1 定义数据dw,db,dd。证明数据是放在代码段CS中。5 用t命令单步调试查看数据。原创 2023-07-11 20:44:10 · 263 阅读 · 0 评论 -
汇编语言-在代码段中使用栈
【代码】汇编语言-在代码段中使用栈。原创 2023-07-11 21:11:59 · 144 阅读 · 0 评论 -
汇编语言-将数据、代码、栈放入不同段
我们在入栈或出栈时,并没有指定段地址,只指定了偏移地址bx,其实数据的默认段地址是DS寄存器的地址。原创 2023-07-11 22:50:37 · 50 阅读 · 0 评论 -
汇编语言之jmp使用示例
B. Jmp 某一合法寄存器,表示用寄存器中的值修改IP,jmp ax类似于mov ip,ax。A. Jmp 段地址:偏移地址,表示用指令中给出的段地址修改CS,偏移地址修改IP。1 用jmp命令实现跳转:jmp 段地址:偏移地址。先将CS指向2000H,IP指向000H。用t命令单步执行看效果。用a命令输入汇编指令。原创 2023-07-09 10:12:33 · 418 阅读 · 0 评论 -
汇编语言之debug用法举例
1 用R命令来查看、改变CPU寄存器内容A. 用R命令查看寄存器内容:rB. 用R命令改变寄存器内容:r 寄存器名2 用D命令查看内存中的内容A. 查看10000H处的内容:d 段地址:偏移地址B. 查看指定范围:d 段地址:起始偏移地址 结束偏移地址3 用E命令改写内存中的内容A. 用E命令改写内存中的内容:e 起始地址 数据1 数据2 …B. 用E命令逐个改写内存内存中的内容:e 起始地址,回车后提示输入新值,按空格修改下一个值。C. 用E命令写入机器码,写法一样。4 用U命令查看汇原创 2023-07-08 22:09:55 · 115 阅读 · 0 评论 -
汇编语言第三课-输出helloworld
保存为文件hello.asm,注意DOS时代,文件名是8.3规则,8个字符的名字,3个字符的扩展名(不包括.)8086汇编,tc都是这个时代的。即文件名长度不能超过8个字符,扩展名不超过3个字符。”,可直接生成”.obj”文件,省去中间文件的确认环节。语法:masm [*.asm文件名][;2 用masm编译程序。3 用link链接文件。原创 2023-07-08 12:49:21 · 553 阅读 · 0 评论 -
汇编语言第二课-寄存器
F. Jmp ax用于仅修改IP的内容,格式为“ jmp 某一合法寄存器”,该功能为:用寄存器中的值修改IP。B. add ax,bx 含义:将寄存器bx中的数据送入ax,相当于 ax = ax + bx。A. AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。A. 在十六进制表示的数据后面加H,在二进制表示的数据后面加B,十进制什么也不加。A. mov ax,18含义:将18送入寄存器ax,相当于ax=18。D. CS存放指令的段地址,IP存放指令的偏移地址。原创 2023-07-07 22:36:11 · 41 阅读 · 0 评论 -
汇编语言第一课-基础知识
C. 寄存器:简单地讲是CPU中可以存储数据的器件,一个CUP中有多个寄存器,AX是其中一个寄存器的代号,BX是另一个寄存器的代号。A. CPU把RAM、ROM相关的存储器看作一个由若干个存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。A. 一个CPU有N根地址线,地址总线宽度为N,最多可以寻址2的N次方个内存单元。C. 其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。A. 汇编指令:机器码的助记符,有对应的机器码。B. 内存:也就是存储器,存放指令与数据。原创 2023-07-07 16:25:03 · 36 阅读 · 0 评论