![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编语言基础
一只特立独行的猫
转行web3中。。。
展开
-
汇编_内中断_外中断_中断处理
内中断:1.取中断类型码n2.标志寄存器入栈,IF=0,TF=03.CS,IP入栈4.IP=n*4,CS=n*4+2注意:1.中断类型码是CPU内部产生。2.IF(interrupt false)为0时不允许其他的可屏蔽中断,sti指令:IF=1,cli指令:IF=0。外中断:1.传入9号中断信息,判断CPU现在是否可以被中断。2.标志寄存器入栈,IF=0,TF=03.CS,IP入栈4.IP=n*4,CS=n*4+25.将数据通过I/O总线传入CPU。注意:中断类型码是外原创 2021-10-02 20:47:16 · 458 阅读 · 0 评论 -
汇编_移位指令_CMOS RAM读取月份
shl指令左移指令指令格式:shl 长度注意点:当长度为1时,可以直接使用1。当长度大于1时,一定要将长度放入cl中,才能使用。shr指令右移指令指令格式:shr 长度注意点:当长度为1时,可以直接使用1。当长度大于1时,一定要将长度放入cl中,才能使用。读取计算机月份并显示从CMOS RAM芯片中读取8号地址的内容(内容为BCD码),然后通过转换ASCII码后放入显存。代码:assume cs:codesgcodesg segmentstart: mov al,原创 2021-10-01 18:04:24 · 173 阅读 · 0 评论 -
汇编_修改中断向量表_自定义中断
文章目录中断向量表介绍索引方式:修改中断向量表自定义中断思路实现效果:实现代码执行步骤中断向量表介绍在dos系统中,总共设计了256种中断,每个中断都有一个中断号,通过中断号来映射中断程序的地址。为了实现映射的功能,引入中断向量表。规定中断向量表的起始地址为0000h,结束地址为03FF,即(0000000000)b~(1111111111)b,总共占用了前1024个字节。注:0200h~02FFh地址空闲,还没有给定中断向量地址索引方式:中断向量表的索引地址由两部分构成,分别是CS和IP,其原创 2021-10-01 11:17:02 · 4304 阅读 · 0 评论 -
汇编_标志寄存器flag_串数据的传送
flag寄存器是标志寄存器,其他寄存器是用来存放数据的,但是flag寄存器每一位都有自己的含义。上述的空位没有任何意义。ZF0标志位:当运算结果为0,zf==1当运算结果不为0,zf==0PF奇偶标志位:当所有二进制位的1的个数是奇数:PF==0当所有二进制位的1的个数是偶数:PF==1...原创 2021-09-27 11:04:37 · 431 阅读 · 0 评论 -
汇编_函数的使用
思想:利用call指令跳转到函数语句,利用ret指令从函数返回主函数。利用寄存器或者内存来传递参数。例题:将1,2,3,4,5,6,7,8这8个数分别进行8次方,并放入内存。代码:assume cs:codeseg,ds:datadata segment dw 1,2,3,4,5,6,7,8 dd 8 dup(0)data endscodeseg segmentstart: mov ax, data mov ds, ax mov cx,原创 2021-09-26 11:42:20 · 179 阅读 · 0 评论 -
汇编_ret_retf_call指令使用说明
目录ret指令retf指令call指令ret指令用法:ret意义:将栈中的数据放入IP寄存器伪码描述:((ss)∗16+sp)−>(IP)((ss)*16+sp)->(IP)((ss)∗16+sp)−>(IP)(sp)+=2(sp) += 2(sp)+=2试验代码:assume cs:codesgstack segment db 16 dup (0)stack endscodesg segment mov ax,4c00h int原创 2021-09-24 10:25:17 · 741 阅读 · 0 评论 -
汇编_条件跳转
offset指令:得到相对于cs的偏移地址assume cs:codesgcodesg segmentstart:s: mov ax, bx mov si, offset s mov di, offset s0 mov ax, cs:[si] mov cs:[di], axs0: nop nopcodesg endsend start转移指令:短转移1.jmp short ptr 标号(偏移范围:8位(-128~127))近转移原创 2021-09-20 18:40:12 · 437 阅读 · 0 评论 -
汇编_结构体处理
问题描述:思路:采用基址+偏移的方式对原始数据和结果进行索引,基址可以通过计算得出,年份和销售额采用dx寄存器通过4字节偏移,人数通过采用si寄存器通过2字节偏移,结果通过di寄存器15字节偏移。初始版:assume cs:codesg,ds:data,ds:resultdata segment db '1975','1976','1977','1978','1979','1980';[0]-[17h] dd 16,22,382,1356,8000,16000;[1原创 2021-09-20 10:30:37 · 232 阅读 · 0 评论 -
汇编_除法(被除数单倍或两倍字长)
以16位字长的Dos系统为例除数: 有8位和16位两种, 在一个寄存器或者内存单元中被除数: 如果除数是8位则被除数为16位, 默认放在AX中, 如果除数是16位, 则被除数为32位, 默认高位放在DX, 低位放在AX结果: 如果除数是8位, 那么执行div后, 余数存放在AH, 商存放在AL中; 如果除数是16位, 那么AX保存商, DX保存余数注意: 被除数的位数一定是除数的两倍被除数为32位(两倍字长):assume cs:codesg,ds:datadata segment原创 2021-09-17 10:56:26 · 584 阅读 · 0 评论 -
汇编_双重循环
思路:采用cx寄存器实现双重循环,但是需要注意由于两次循环都需要用到cx寄存器,但是cx寄存器又不能共享,所以引入了一个dx寄存器来暂存第一层循环的cx。实现将四个字符串的前三个字符转换为大写字符。assume cs:codesg,ds:datadata segment db "abc..." db "def..." db "ghi..." db "jkl..."data endscodesg segment start: mov ax, data原创 2021-09-16 16:32:38 · 1957 阅读 · 0 评论 -
汇编_数组的底层使用
采用ds作为数组的头,用bx寄存器来做偏移量,实现将abcd转换为大写,ABCD转换为小写。assume cs:codesg,ds:datadata segment db 'abcd' db 'ABCD'data endscodesg segmentstart: mov ax, data mov ds, ax;定义数据段 mov bx, 0;定义初始偏移量 mov cx, 4;循环次数s: mov al, [bx] or a原创 2021-09-16 08:59:39 · 554 阅读 · 0 评论 -
汇编_stack的使用
如果要将一些数字按照原来的顺序逆序存放,一般就用到栈了。第一种实现方法不太常用,一般是将栈和数据定义到一个段里面。assume cs:codecode segment dw 1234h,5678h;定义数据 dw 0,0;定义栈段s :mov ax, cs add ax, 4 mov ss, ax;定义栈段 mov sp, 8;定义栈底,留心内存溢出,不要上溢到数据段 mov bx, 0 mov cx, 2;设置循环次数s0: push c原创 2021-09-15 18:31:45 · 2802 阅读 · 0 评论 -
汇编_循环的使用
loop对cx寄存器进行自减操作,即(cx) = (cx) - 1当(cx)不等于0时,跳转到指定的地址。//计算2的12次方assume cs:code//将code定义为代码段code segmentstart://定义代码开始地址 mov ax, 2; mov cx, 11;s: add ax, ax; loop s;//跳转地址 mov ax, 4c00h; int 21h;code endsend start;//代码结束d原创 2021-09-13 20:44:41 · 447 阅读 · 0 评论 -
一个编译型程序的编译,链接,运行过程(以汇编为例)
1.编写汇编代码并将代码文件命名为以.asm结尾的文件。(计算2的三次方)assume cs:abc//定义代码段地址abc SEGMENT MOV ax, 2;//将2送入ax寄存器 ADD ax, ax;//ax=ax*2 ADD ax, ax;//ax=ax*2 MOV 4000h,ax;//将ax寄存器的值放入4000h的内存中 INT 21h//21号中断调用abc endsend//程序结束2.打开vscode的Dos系统(通过MASM原创 2021-07-10 20:50:05 · 585 阅读 · 1 评论 -
汇编语言debug常用指令整理
目录1.查看寄存器的值2.修改寄存器的值3.查看内存内容4.修改内存的值5.写汇编指令进入内存6.查看内存中的汇编指令7.执行汇编指令在使用这些指令前,需要先输入debug进入调试模式。1.查看寄存器的值-r测试结果:2.修改寄存器的值-r targetRegister测试结果:3.查看内存内容-d 默认查看CS:IP地址的内容查看目的地址的内容-e address测试结果:4.修改内存的值从给定的起始地址开始修改内存器的值,不给地址默认为上一次修改地址之后的地原创 2021-06-30 21:58:23 · 2686 阅读 · 2 评论 -
vscode汇编环境配置
1.下载vscode在官网下载vscode下载链接:https://code.visualstudio.com/Download.根据自己的操作系统选择vscode版本。2.下载汇编插件在vscode的扩展界面下载MASM插件,方便在DOS下运行汇编。3.运行汇编程序创建helloworld.asm文件,将下列代码复制到该文件,右键运行当前程序。代码块:DATA SEGMENT;//定义数据段 MYWORD DB "hello world!!!!$";//定义字符串数组DA原创 2021-06-24 21:52:39 · 12069 阅读 · 5 评论