汇编
请叫我大虾
这个作者很懒,什么都没留下…
展开
-
漫游汇编二
1. 引入数据段寄存器来解决程序的重定位问题。原创 2020-08-28 16:17:06 · 201 阅读 · 0 评论 -
<X86汇编语言:实模式到保护模式>四十六 中断和异常的处理与抢占式多任务
中断和异常概述原创 2021-08-26 18:09:44 · 223 阅读 · 0 评论 -
漫游汇编一
一:用电来表示数字二:加法和四则运算三:寄存器四:指令五:内存和内存的访问六:处理器七:汇编语言的出现八:汇编语言程序设计的一般过程原创 2020-08-15 14:14:38 · 229 阅读 · 0 评论 -
汇编:中断向量表
当程序出现错误,可能会触发中断程序。中断向量表维护的就是处理相应错误的程序地址。0号处理中断信息的程序地址1号处理中断信息的程序地址2号处理中断信息的程序地址 0: 0*4地址的内容 = IP0: 0*4+2地址的内容 = CS 1: 1*4地址的内容 = IP1: 1*4+2地址的内容 = CSassume cs:code, ds:data, ss:...原创 2019-01-13 17:36:28 · 4001 阅读 · 0 评论 -
汇编:中断过程
中断过程如下: 1. 取得中断类型N 2. 保存标志位寄存器 ====》栈 pushf 3. 将标志位寄存器的第8位(TF), 第9位(IF) 设置为0. 4. push cs 5. push ip 6. cs = N*4+2地址的内容, ip = N*4地址的内容 iret指令相当于执行了 pop ip, pop cs, popf指令. ...原创 2019-01-13 18:35:31 · 1235 阅读 · 0 评论 -
汇编: 用int中断改变ip,实现loop循环
在屏幕中间显示一行"!" assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segment start: mov bx, stack mov ss, bx mov sp, 129...原创 2019-01-19 12:28:16 · 465 阅读 · 0 评论 -
汇编:shl, shr 逻辑移动指令
shl al, 1 往左边移动1位 bit位1。将1个寄存器或者内存单元中的数据向左移位(bit位)2。将移除的这一位,放到CF中3。最低位用0补充 shl al, 1shl al, 1shl al, 1shl al, 1相当于下面语句mov cl,4shl al, cl ...原创 2019-02-23 11:38:10 · 1701 阅读 · 0 评论 -
汇编:通过70H, 71H端口读取cmos时间
assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segment start: mov ax, stack mov ss, ax mov sp, 128 call init_reg...原创 2019-02-24 15:03:17 · 2534 阅读 · 0 评论 -
汇编: cli, sti
cli ; IF = 0 这时候发生键盘中断,就会屏蔽键盘中断sti ; IF = 1 IF为0 可以屏蔽外部中断IF为1 就可以响应外部中断原创 2019-02-24 22:12:08 · 1382 阅读 · 0 评论 -
汇编:键盘中断(int 9)
键盘中断, 一般按下键盘上的某个按钮就会触发键盘中断.assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segment start: mov ax, stack mov ss, ax...原创 2019-03-01 22:01:09 · 2582 阅读 · 0 评论 -
汇编: 描述内存长度
assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 128 dup(0)stack endscode segment; (NUMBER:) 只能表示偏移地址; (NUMBER) 表示偏移地址 表好长度 很像高级语言的变量名,比如c语言中...原创 2019-03-01 23:04:23 · 310 阅读 · 0 评论 -
汇编: 使用ds data
assume cs:code, ds:datadata segmenta db 1,2,3,4,5,6,7,8b dw 0x db 88Haddress dw OFFSET a, seg a, OFFSET b, seg b ; a的偏移地址,a的段地址, b的偏移地址, b的段地址data endscode segment start: mov bx, data...原创 2019-03-02 22:24:06 · 1189 阅读 · 0 评论 -
汇编:直接定址表使用
assume cs:code, ds:data, ss:stackdata segmentARRAY db 3DH, 0FFH, 5BH, 7CH, 21HNUMBER db '0123456789ABCDEF' data endsstack segmentstack endscode segment start: mov ax, stack mov ...原创 2019-03-18 01:33:25 · 403 阅读 · 0 评论 -
汇编:端口
cpu通过内存地址访问内存,显存等内存. 那么是不是通过内存地址访问鼠标, 键盘,音箱,当然不是了.cpu通过端口(port)访问这些外部资源。原创 2018-11-17 21:30:51 · 498 阅读 · 0 评论 -
汇编:DF标志位
DF: UP(向上) DN(down 向下)assume cs:code, ds:data, ss:stackdata segment db 128 dup(128)data endsstack segment db 128 dup(128)stack endscode segment start: mov dx, stack mov ss, dx m...原创 2019-01-13 11:19:46 · 3509 阅读 · 0 评论 -
汇编:cmp
assume cs:code, ds:data, ss:stackdata segment db "Beginer's All - purpose symbolic instraction Code.",0data endsstack segment db 128 dup(0)stack endscode segment start: mov dx, stack...原创 2019-01-12 18:05:51 · 1905 阅读 · 0 评论 -
汇编工具
下载dosbox 官网:https://www.dosbox.com/ 这里是最新版本的链接地址. 根据操作系统,选择对应版本的dosbox. dosbox 命令: mount d d:\ 该命令是dosbox的指令,用来把自己d盘挂载到dosbox的d盘 在D盘建立了一个文件夹masm,作为汇编文件存放位置;使用mount d d:\masm命令后...原创 2018-11-11 17:17:26 · 3064 阅读 · 0 评论 -
汇编:内存段的安全
随意的在内存段中写入数据,可能就会修改其他程序或系统程序的数据,这样就会造成程序或系统崩溃。这是件很危险的事情。那么我们怎么取得安全的内存段呢? 1. 在 0:200H~0:2FFH, 一般情况下,没有程序会使用这段内存区域。但块内存区域只有256个字节,一般情况下都不够我们使用。 2. 由操作系统给我们分配内存。在操作系统环境中,合法的通过操作系统取得的内存...原创 2018-11-25 17:40:39 · 318 阅读 · 0 评论 -
汇编:源文件asm, exe可执行文件
asm文件是汇编源代码文件。汇编源代码由一下三部分组成 1. 汇编指令 被编译器翻译成0,1的机器指令(机器码),然后由cpu执行。 2. 伪指令 由编译器执行 3. 符号体系 由编译器执行 exe可执行文件,不止包括了我们整个程序。还包括了描述信息,系统就是根据这些描述信息,进行相关的设置。 data segment...原创 2018-11-25 19:47:25 · 6320 阅读 · 0 评论 -
汇编: 使用[bx]代替[0]获取内存数据
inc指令: inc是increase的缩写 如下: mov dl,0BEH 如果数据是字母开头,那么字母前面要加上0,这是汇编编程规定.原创 2018-11-26 23:01:12 · 381 阅读 · 0 评论 -
汇编: loop指令
assume cs:codecode segment mov ax,2000H mov ds,ax mov bx,1000H addNum: mov ds:[bx],dl # addNum是一个标识,存放的是 mov ds:[bx], dl指令的地址 inc dl inc bx jmp addNum # 跳转到 addNu...原创 2018-11-27 00:44:14 · 714 阅读 · 0 评论 -
汇编:dd 伪指令
db: define byte 8bitdw: define word 16bitdd: define dword(double word), 双字形 32bitassume cs:code, ds:data, ss:stackdata segment dd 100001 dw 100 db 0data ends...原创 2018-12-20 12:42:02 · 4492 阅读 · 0 评论 -
汇编: 在代码中安排自己定义的数据,栈空间
assume cs:codecode segment dw 1,2,3,4,5,6,7,8 ; 我们自定义的数据 不是我们自定义的指令 ; d:define w:wordstart: mov bx,0 mov ax,0 mov cx,8; 将数据相加addNumber: add ax,cs:[bx] add bx,2...原创 2018-12-09 14:31:05 · 610 阅读 · 0 评论 -
汇编: dup伪指令
dup可以重复定义前面的数据 assume cs:code, ds:datadata segment db 10 dup (0) ; 连续定义10个字节型的0 db 1,2,3,4,5,6 db 10 dup ('a') db 6,5,4,3,2,1 db 4 dup('123','abc')data endscode segment start...原创 2018-12-21 00:30:40 · 18237 阅读 · 2 评论 -
汇编(8086cpu): AX,BX,CX,DX寄存器
AX,BX,CX,DX寄存器这四个寄存器也被称为通用寄存器.一般用来存放数据,一个寄存器可以存放16bit,也就是2bytes. 所以也被称为16位寄存器。 什么特殊的地方导致这四个寄存器和其他寄存器不一样呢? 是因为这四个寄存器可以被分为两个8位寄存器,比如 AX = AH + AL, BX = BH+BL, CX = CH + CL, DX = DH...原创 2018-11-17 21:57:52 · 11048 阅读 · 0 评论 -
汇编:栈
栈是一段连续的内存单元,也就是一段连续的内存地址。 需要特殊的访问形式--才能访问栈。 栈的模型就像一个箱子,通过"入栈","出栈"操作栈这个箱子, 这个箱子还有一个标记"栈顶",永远指向栈的顶部。 从内存角度看: 入栈: push, 将16位寄存器或者内存中的字型数据 ----->栈顶标记的上面。 出栈: pop 将栈顶标记所标识的字型...原创 2018-11-24 11:09:40 · 1391 阅读 · 0 评论 -
win7系统, vim的_vimrc文件无法修改
转载自: https://blog.csdn.net/tianzhaixing/article/details/18267593解决方案:1.右键单击_vimrc 在下拉菜单中选择"属性",单击"安全";2.再单击组合用户中的“Everyone“, 在单击"编辑";在“Everyone”权限中把"完全控制"选上"确定"。...转载 2018-11-11 18:26:26 · 846 阅读 · 0 评论 -
汇编----连接,编译
汇编语言提供了从机器角度思考问题的思维方式. 汇编器会促使程序员思考,用什么寄存器和内存地址。 汇编与机器指令是一一对应的,但一行高级编程语言,可能会转成几十条二进制指令(编译器完成高级语言的翻译)。为了脱离底层细节,开发了编程语言。让程序员专心解决问题,不用管硬件细节。在高级语言中,程序员只需要创建代表内存地址的抽象----变量dosbox: 在现在的系统下模拟DOS环境的一个...转载 2018-11-11 23:26:05 · 289 阅读 · 0 评论 -
汇编(8086cpu): 地址寄存器
8086cpu结构图 存放段地址的寄存器就是段地址寄存器,存放偏移地址的就是偏移地址寄存器.段地址寄存器: DS, ES, SS, CS偏移地址寄存器: SP,BP,SI,DI,IP, BX(bx也是一种数据,所以bx也可以存放地址信息)以上地址寄存器都是16位 cs:ip读取的内存地址中的内容是指令,而不是数据。 CS(codesegment)——16位的...原创 2018-11-18 20:34:21 · 2061 阅读 · 0 评论 -
汇编: dosbox命令
-u:显示机器指令和汇编指令, 内存单元内容查看(以汇编指令的形式显示)-d:显示的具体数据 内存单元内容查看(以16进制ASCLL的形式显示)-e:修改内存单元内容-r:检查和修改寄存器内容-a: 输入指令 1. 输入a,直接输入指令 2. 如下, 输入"a 段地址:偏移地址"的形式,将指令输入到指定地址的内存中。-t: 执行指令-q:退出程...原创 2018-11-17 11:07:45 · 3220 阅读 · 0 评论 -
汇编:内存地址为什么从0开始?等问题
内存地址的最小单元是byte(字节) 1byte = 8bit, 1kb = 1024byte, 1mb = 1024kb, 1gb = 1024mb 内存地址为什么从0开始? 地址线决定了cpu能够找到多大的地址,这就是寻址能力. 如果只有1根地址线, 那么只能找到0,1两个地址。 如果只有2根地址线, 那么只能找到00,01,10,11四个地址。...原创 2018-11-17 11:13:34 · 2726 阅读 · 0 评论 -
汇编(8086cpu): 字节数据(byte)与字型数据
字符数据由2bytes组成。 在dosbox的 2000:0内存中一次输入指令: mov ax, 1234 mov bx, 5678 mov cx,9876 mov dx,4321 那么这些数据在内存中的内容如下: 一个字型数据(如 1234H)存放在内存中,由2个连续的地址的内存单元组成。 高地址内存单元存放字型数据的高位...原创 2018-11-22 16:50:22 · 7429 阅读 · 1 评论 -
汇编(8086cpu): ip寄存器与指令的关系
指令的执行过程: 1. cpu从cs:ip所指向的内存单元读取指令,存放到指令缓存器中。 2. ip=ip+所读指令的长度,从而指向下一条指令。 3. 执行指令缓存器中内容,回到步骤1. 8086cpu不支持 mov cs, ax 或 mov cs, 5等修改cs,ip寄存器的内容.要想修改,就必须通过jmp指令修改cs,ip寄存器的内容. ...原创 2018-11-19 22:09:20 · 2046 阅读 · 0 评论 -
汇编:ds寄存器--数据段
mov ax,[0] // ax表示取两个字节的数据, [0]表示偏移地址。 mov al, [1] mov ax,[2] 把 ds指向的内存中的数据存到ax或al中. []表示偏移地址. 并且根据 ax,al判断取几个字节.改变ds寄存器的值 将ax寄存器的值存到ds所指向的内存中。 将al寄存器的值存到ds所指向的内存中。...原创 2018-11-22 23:08:39 · 4457 阅读 · 0 评论 -
汇编: 更灵活的定位内存地址的方法
bx是偏移地址寄存器。同样的, si,di也是偏移地址寄存器。 这样使用了si,di可以更灵活的定位内存地址。assume cs:codecode segment start: mov bx,0 mov si,0 mov ax,ds:[si] inc si...原创 2018-12-16 10:41:59 · 298 阅读 · 0 评论 -
汇编: and,or逻辑运算指令
assume cs:codecode segment ; 逻辑运算 按照二进制位运算 start: mov ax,0 mov al, 00001111B and al, 11110000B ; 00000000B ...原创 2018-12-16 10:57:39 · 4128 阅读 · 0 评论 -
汇编:以字符形式给出数据
用单引号括起来,表示字符assume cs:code , ds:datadata segment db 65,66,67,68,69 db 'abc123 lmn' data endscode segment start: mov ax, data mov ds, ax mov bx, 0 ...原创 2018-12-16 11:56:15 · 356 阅读 · 0 评论 -
汇编:call指令的应用
assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment db 128 dup(0)stack endscode segment start: mov ax, data mov ds, ax mov ax, stack mov ss,ax ...原创 2018-12-30 21:59:24 · 1199 阅读 · 0 评论 -
汇编:从键盘读取字符
键盘上有芯片,主板上有端口. 假设在键盘上按了字母‘a’,‘a’会先被保存在键盘上的芯片中。(键盘上有跟数据线与主板的一个口子连在一起。主板上的这个口子叫做端口). 然后‘a’通过数据线发送到主板的端口中。cpu就会通过数据线,地址线,控制线读取端口中的字符‘a’ cpu从内存中读取内容,是通过 "mov 寄存器,内存地址" 的方式. 那么怎么读取硬件(端口)的内容呢? 通过...原创 2019-01-10 19:45:53 · 1929 阅读 · 0 评论 -
汇编:CF(carry flag)标志位
F:flagCY: carry yes NC:not carryCF只跟 add等运算指令有关。 mov,push等移动指令不会改变CF。原创 2019-01-10 22:40:14 · 3992 阅读 · 0 评论