![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编语言
阳小良
不想做插画师的程序猿,不是好厨师!
展开
-
汇编语言学习笔记(二):寄存器(cpu工作原理)
CPU工作原理CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连2.1通用寄存器8086有14个寄存器(16位):AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSWAX,BX,CX,DX称为通用寄存器,用来存放一般数据,为保证向下兼容,通用寄存器都可以分为两个独立的8位寄存器使用例:AX:AH和AL(高低位)2.2字在寄存原创 2014-04-14 14:19:39 · 687 阅读 · 0 评论 -
汇编语言学习笔记(五)bx和loop指令
5.1[bx]和[0]类似[0]表示偏移地址长度,段地址默认在bs中,但是[0]在debug中跟asm中表示的不一样,[0]在asm中ml之后会变成数值0为解决mov ax,[1]在axm编译后变成mov ax,1;可以写成mov ax,ds:[1]四种:mov al,[0];mov al,ds:[0];mov al,[bx];mov ds:[bx]loop:与循环原创 2014-07-04 09:06:21 · 809 阅读 · 0 评论 -
汇编语言学习笔记(四)第一个应用demo
编写》编译链接》4.2源程序assume cs:codesgcodesg segementstart: mov ax,0123H mov bx,0456H add ax,bx int 21hcodesg endsend汇编指令:mov add伪指令:由编译器来执行xxx segementxxx endssegment原创 2014-07-04 09:06:19 · 1023 阅读 · 0 评论 -
汇编语言学习笔记(十五)外中断
接口芯片和端口pc系统:外中断:1.可屏蔽中断:中断类型码通过数据总线送入cpu2.不可屏蔽中断cpu可以不响应的中断:需要判断IF位IF=1则cpu执行中断响应过程IF=0则cpu不执行中断过程sti设置IF=1cli设置IF=0int 9:键盘中断键盘各键的扫描码原创 2014-07-17 15:21:45 · 568 阅读 · 0 评论 -
汇编语言学习笔记(十三)int指令
int指令:引发中断过程int n:n为中断类型码。编写供应用程序调用的中断例程对int、iret和栈的深入理解bios中断例程应用int 10h中断是bios提供的中断例程,其中包含了多个和屏幕输出相关的子程序mov ah,2 光标mov al,'a' 字符mov bh,0 第0页mov dh,5 第5列mov dl,1原创 2014-07-17 15:20:05 · 983 阅读 · 0 评论 -
汇编语言学习笔记(九)转移指令的原理
1.8086转移指令分类:无条件跳转指令:jmp条件转移指令:循环指令:loop过程(相当于c的函数)中断()操作符offset在汇编语言中有编译器处理的符号,他的功能是取得标号的偏移地址start:mov ax,offset start;相当于mov ax,0jmp无条件跳转,可以只修改ip,也可以同时修改cs和ipjmp short 标号(段内短转移原创 2014-07-17 15:16:33 · 699 阅读 · 0 评论 -
汇编语言学习笔记(七)更灵活的定位内存地址的方法
1.and or 指令and逻辑与:同真为真可以将操作对象的某一位设置为0 :比如第六位:则and al,10111111Bor或运算:同假为假可以将操作对象的某一位设置为1 :比如第六位:则and al,01000000BASCII码中大小写转换:相差32为2的5次方。字节位置在第5位不同可以利用上面的运算可以轻松的转换大小写2.[bx+idata原创 2014-07-17 15:15:06 · 686 阅读 · 0 评论 -
汇编语言学习笔记(十四)端口
cpu可以直接读取三个地方的数据1)cpu内部寄存器2)内存3)端口端口(这里指的是硬件端口8086)读写两条指令:in和out访问内存:mov ax,ds:[8]访问端口:in al,60h;从60h端口读入一个字节(0-65535)在in和out指令中,只能使用ax或者al来存放端口的数据CMOS RAM芯片:包含一个实时钟和一个128个存储单元的R原创 2014-07-17 15:20:55 · 860 阅读 · 0 评论 -
汇编语言学习笔记(十六)直接定址表
标号:标示了内存单元的地址在code段中a、b后面没有:,因此可以同时描述内存地址和单元长度code segmenta db 1,2,3,4b dw 0标号a,描述了地址code:0,和从这个地址开始,以后的内存单元都是字节单元;标号b,描述了地址code:8,和从这个地址开始,以后的内存单元都是字单元mov ax,b相当于mov ax,cs:[8]在后面加有:原创 2014-07-17 15:19:54 · 640 阅读 · 0 评论 -
汇编语言学习笔记(十一)标志寄存器
flag寄存器(传送指令不会影响标志寄存器)flag的1、3、5、12、13、14、15位在8086cpu中没有使用,不具有任何含义。而其余的都有特殊含义ZF:0标志位如果结果为0,则ZF=1如果结果非0,则ZF=0PF:奇偶标志位如果1的个数为偶数,则PF=1,否则为0SF:符号标志位结果为负数,SF=1,否则为0CF:进位标志位OF:溢出标志位原创 2014-07-17 15:18:04 · 688 阅读 · 0 评论 -
汇编语言学习笔记(十)call和ret指令配合使用
1.ret和retfret:指令用栈中的数据,修改ip的内容,从而实现了近转移cpu执行ret指令时,进行下面两步操作:1)(ip)=((ss)*16+(sp))2)(sp)=(sp)+2相当于pop ipretf:用栈中的数据,修改cs和ip的内容,从而实现远转移1)(ip)=((ss)*16+(sp))2)(sp)=(sp)+23)(cs)=((ss)*原创 2014-07-17 15:14:33 · 741 阅读 · 0 评论 -
汇编语言学习笔记(八)数据处理的两个基本问题
1.bx,si,di,bp以后用:reg来表示寄存器,sreg来表示段寄存器reg:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,cl,sp,bp,si,disreg:ds,ss,cs,es8086中只有四个寄存器可以放在[]中间作为内存单元的寻址bp和bx、si和di是不能组合的,剩下都可以bp:只要在[]中使用bp,而没用显示的给出段地址,段地址就默原创 2014-07-17 15:15:53 · 707 阅读 · 0 评论 -
汇编语言学习笔记(十二)内中断
中断:是cpu处理外部突发事件的一个重要技术。外部中断:可以屏蔽的中断(键盘中断、打印机中断等)内部中断:因硬件的出错或运算出错等根据中断类型码,定位中断处理程序,需要知道它的段地址和偏移地址可以通过中断向量表找到中断处理程序的入口中断向量表指定存放在内存地址0处256*4=1024个字节(cs:ip)在中断过程中,需要设置标志寄存器的TF和IF的值为0原创 2014-07-17 15:18:49 · 590 阅读 · 0 评论 -
汇编语言学习笔记(六)包含多个段的程序
6.1在代码段中使用数据dw 定义字型数据:define worddb 定义字节数据:define byteassume cs:codesgcode segment dw 0123h,0456h(偏移地址从0、2、4、6...)start:mov bx,0 mov ax,0 mov cx,8 s:add ax,cs:[bx]原创 2014-07-17 15:11:32 · 543 阅读 · 0 评论 -
汇编语言学习笔记(一):汇编语言基础知识
直接在硬件之上工作的编程语言汇编指令是机器指令便于记忆的助记符;机器指令都是01汇编指令:MOV AX,BX 将bx移到ax寄存器:cpu中可以存储数据的器件(ax、bx都是寄存器的代号)程序员——》汇编指令——》编译器——》机器码——》计算机其他语言需要先汇编成汇编指令:所以如果编写的好的话,汇编指令是最快的语言汇编语言组成:1.汇编指令(机器码助记符原创 2014-04-02 14:34:44 · 862 阅读 · 0 评论 -
汇编语言学习笔记(三)寄存器(内存访问)
3.1内存中字的存储字型数据与字节型数据(前者是一个字节,两个16位的数)任何两个地址连续的内存单元,N和N+1,可以将他们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元3.2DS和addressDS寄存器:通常用来存放要访问的数据的段地址mov bx,1000Hmov ds,bxmov al,[0]上面三条指令将10000H(1原创 2014-07-04 09:05:29 · 686 阅读 · 0 评论