ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:21.14KB ,
资源ID:4969790      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4969790.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(王爽汇编语言学习笔记.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

王爽汇编语言学习笔记.docx

1、王爽汇编语言学习笔记第一章基础知识汇编语言由3类指令组成汇编指令:机器码的助记符,有对应机器码。伪指令:没有对应机器码,由编译器执行,计算机并不执行其他符号:如+-*/,由编译器识别,没有对应机器码一个CPU有n根地址线,则可以所这个CPU的地址线宽度为n,这样的CPU最多可以寻找2的n次方个内存单元。1K=210B 1M=220B 1G=230B8086 CPU地址总线宽度为20,寻址范围为00000FFFFF000009FFFF 主存储器地址空间(RAMA0000BFFFF 显存地址空间C0000FFFFF 各类ROM地址空间第二章寄存器(CPU工作原理16位结构描述了一个CPU具有下面几

2、个方面的结构特性运算器一次最多可以处理16位的数据寄存器的最大宽度为16位寄存器和运算器之间的通路为16位8086有20位地址总线,可以传送20位地址,达到1M的寻址能力。采用在内部用两个16位地址合成的方法来形成一个20位的物理地址物理地址= 段地址16 + 偏移地址在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址16定位段的起始地址(基础地址,用偏移地址定位段中的内存单元。段地址16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB8086有四个段寄存器CS、DS、SS、ESCS为代码

3、段寄存器,IP为指令指针寄存器。任意时刻,设CS中内容为M、IP中内容为N,8086CPU从内存M16+N读取一条指令执行不能用mov修改CS、IP,因为8086CPU没有提供这样功能,可用指令JMP 段地址:偏移地址。JMP 2AE3:3 JMP AX 修改IP第三章寄存器(内存访问DS数据段寄存器。不能将数据直接送入段寄存器,所以MOV DS, 1不正确字在存储时要两个连续的内存单元,低位在低地址,高位在高地址address表示一个偏移地址为address的内存单元SS:SP指向栈顶元素PUSH AX:(1SP = SP - 2;(2AX送入SS:SPPOP AX:(1SS:SP送入AX;

4、(2SP = SP + 2PUSH/POP 寄存器PUSH/POP 段寄存器PUSH/POP 内存单元第四章第1个程序可执行文件包含两部分:程序和数据,相关的描述信息程序加载后,ds中存放这程序所在内存区的段地址,这个内存区的偏移地址为0,策程序所在的内存区的地址为ds:0;这个内存区的前256个字节中存放的是PSP,dos用来和程序进行通信。从256字节处向后的空间存放的是程序。第五章BX和loop指令BX表示一个内存单元,它的段地址在ds中,偏移地址在bx中。MOV AX,BX MOV AL,BX MOV BX,AXloop要进行两步操作,CX=CX-1;判断cx中值,不为零则转至标号处执

5、行程序,为零则向下执行。masm将指令mov ax,0 当作mov ax,0 处理解决方法可以为mov bx,0 使用寄存器mov ax,bx或mov ax,ds:0 直接给出段地址所在的段寄存器loop中不可使用mov cx,cx第六章包含多个段的程序dw 定义字型数据end 标号定义程序入口点定义多个段,同定义代码段相同。定义仅仅是为了程序阅读方便assume cs:code,ds:data,ss:stack是伪指令,将定义的具有一定用途的段和相关的寄存器联系起来对于段,如果数据占N个字节,则程序加载后实际占有空间为:(N/16+1*16,N的16整数第七章更灵活的定位内存地址的方法and

6、 按位与and al, 0EFhor 按位或or al, 20h字母大小写转换:大写(xx0x xxxxand al, 0EFh小写(xx1x xxxxor al, 20hmov ax,200+bx = mov ax,bx+200 = mov ax,200bx = mov ax,bx.200 段地址为ds,偏移地址为bx+200si和di示8086CPU中和bx功能相近的寄存器,si和di不能分成两个8位寄存器来使用一般来说,在需要暂存数据的时候,都应该使用栈第八章数据处理的两个基本问题bx,si,di,bp1。在8086CPU中,只有这4个寄存器可以用在.中来进行内存单元的寻址正确:mov

7、ax,bx | mov ax,bp错误:mov ax,cx | mov ax,dx | mov ax,ax | mov ax,ds2。在.中,这4个寄存器可以单个出现,或只能以四种组合出现:bx和si、bx和di、bp 和si、bp和di错误:mov ax,bx+bp | mov ax,si+di3。只要在.中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中mov ax,bp ax=ss*16+bp(取地址值在没有寄存器名存在的情况下,用操作符X ptr 指明内存单元的长度,X在汇编指令中可以位word或byte:mov word ptr ds:0,1 | add word

8、ptr bx,2 | inc byte ptr ds:2div,除法指令div 除数除数8位16位被除数AX DX-高16位AX-低16位商AL AX余数AH DXdd 伪指令,定义双字dworddup 伪指令,用来进行数据的重复db 3 dup (0 = db 0,0,0db 3 dup (0,1,2 = db 0,1,2,0,1,2,0,1,2db 3 dup (ab,CD = db abCDabCDabCD第九章转移指令的原理可以修改ip,或同时修改cs和ip的指令统称为转移指令8086CPU的转移行为有一下几类:只修改ip时,称为段内转移,如jmp ax同时修改cs和ip时,称为段间转

9、移,如jmp es:dx由于转移指令对ip的修改范围不同,段内转移又分为:短转移和近转移短转移ip的修改范围为-128127近转移ip的修改范围为-32768327678086CPU的转移指令分为以下几类:无条件转移指令(如jmp条件转移指令循环指令(如loop过程中断offset 取得标号的偏移地址jmp short 标号实现段内短转移,对ip的修改范围为-128127 对应机器码中包含转移的位移EB地址jmp near ptr 标号实现段内近转移,对ip的修改范围为-3276832767 对应机器码包含转移的位移jmp far ptr 标号实现段间转移对应机器码中高地址为段地址,低地址为偏

10、移地址EA偏移地址段地址jmp word ptr 内存单元地址(段内转移jmp dword ptr 内存单元地址(段间转移高地址存放目的段地址,低地址存放目的偏移地址jcxz 标号cx为0时跳转所有有条件跳转指令都是短转移,对ip的修改范围都为-128127loop 标号所有循环指令都是短转移,对ip修改范围都为-1281278025彩色字符显示模式显示缓冲区结构:内存地址空间中,B8000hBFFFFFh共32KB的空间,为8025彩色显示缓冲区。向这个地址写入数据,写入的内容将立即出现在显示器上。在8025彩色字符模式下,显示器可以显示25行,每行80个字符,每个字符可以有256种属性。一

11、个字符在缓冲区占两个字节,一屏内容共占4000个字节。显示缓冲区分8页,每页4KB,显示器可以显示任意一页的内容,一般显示第0页,即B8000hB8F9Fh。在一行中,一个字符占两个字节的存储空间,低位字节存储字符的ASCII码,高位字节存储字符的属性,一行80字符,占160字节属性字节的格式:7 6 5 4 3 2 1 0BL(闪烁RGB(背景I RGB(前景显示在M行N列的字符为B800:160*M + 2*N第十章call和ret指令ret用栈中数据修改ip,实现近转移(ip = (ss * 16 + (sp(sp = (sp + 2相当于:POP ipretf用栈中数据修改cs和ip,

12、实现远转移(ip = (ss * 16 + (sp(sp = (sp + 2(cs = (ss * 16 + (sp(sp = (sp + 2相当于:POP ipPOP cscall指令,call指令不能实现短转移,实现转移的方法和假名牌指令原理相同1。call 标号,段内转移机器指令中没有转移的目的地址,而是相对于当前ip的转移位移(补码,相当于 1.push ip 2.jmp near ptr 标号2。call far ptr 标号,段间转移机器指令中包含转移目的地址,相当于 1.push cs 2.push ip 3.jmp far ptr 标号3。call 16位寄存器相当于1.pus

13、h ip 2.jmp 16位寄存器,机器指令不包含目的地址注意:1.push ip ip先变成call后第一个字节的偏移地址,然后入栈4。call word ptr 内存地址相当于1.push ip 2.jmp word ptr 内存地址5。call dword ptr 内存地址相当于1.push cs 2.push ip 3.jmp dword ptr 内存地址注意:2.push ip ip先变成call后第一个字节的偏移地址,然后入栈mul 指令,乘法 a ba 8位16位b AL AX结果AX 高位DX,低位AX第十一章标志寄存器11 10 9 8 7 6 4 2 0OF DF IF T

14、F SF ZF AF PF CFZF 零标志位,如果运算结果为零,则ZF=1PF 奇偶标志位,相关指令执行后,1 的个数为偶数PF=1SF 符号标志位,执行后,计算结果为负SF=1CF 进位标志位,无符号加减发生最高有效位之外的进、接位时CF=1OF 溢出标志位,有符号运算发生溢出时CF=1adc 带进位加法,adc ax,bx = (ax=(ax+(bx+CFsbb 带借位减法,sbb ax,bx = (ax=(ax-(bx-CFcmp 比较指令,相当于减法,但是不保存结果,只影响标志寄存器cmp ax,bx无符号比较时:ax=bx, ZF=1axbx, ZF=0ax bx, CF=0 an

15、d ZF=0ax=bx, CF=0有符号比较时(反向说明cmp ah,bh:SF=0 and OF=0, ah=bhSF=0 and OF=1, ah bhSF=1 and OF=0, ah bh无符号比较跳转指令je, ZF=1jne, ZF=0jb, CF=1jnb, CF=0ja, CF=0 and ZF=0jna, CF=1 or ZF=1DF 方向标志位,在串处理指令中,控制每次操作后si di的增减,DF=1 操作后si di递减使用cld,std设置:cld, DF=0. std, DF=1movsb 将ds:si内存单元字节送入es:di相当于:mov es:di, byte

16、ptr ds:si ;非8086指令DF=0: inc si, inc diDF=1: dec si, dec di类似的还有movsw,传送一个字一般使用格式为rep movsb相当于s:movsb, loop s,所以要在之前设置cxpushf 将标志寄存器值入栈,popf 将标志寄存器值出栈标志寄存器在debug中的表示0 OV DN NG ZR PE CY 1 NV UP PL NZ PO NC OF DF XX SF ZF XX PF CF 第十二章 内中断 中断类型码: 除法错误:0 单步执行:1 int0 指令:4 int n:n 中断向量表 0000:00000000:03E8

17、, 1000 个单元, 号中断偏移地址为 4N, N 段地址为 4N+2, 高地址为段地址,低地址为偏移地址 中断处理过程: 1.取得中断类型码 N 2.pushf 3.TF=0, IF=0 4.push CS 5.push IP 6.ip=4N, cs=4N+2 中断处理程序的编写和子程序类似,常规步骤为: 1.保存用到的寄存器 2.处理中断 3.恢复用到的寄存器 4.用 iret 返回(iret = pop ip, pop cs, popf) 第十三章 int 指令 10 中断 mov ah, 2 ;置光标,2 号子例程为设置光标位置 mov bh, 0 ;第 0 页 mov dh, 5

18、;行号 mov dl, 12 ;列号 int 10h -mov ah, 9 ;9 号子例程为在光标位置显示字符 mov al, a;字符 mov bl, 7 ;颜色属性 mov bh, 0 ;第 0 页 mov cx, 3 ;字符重复个数 int 10h 第十四章 端口 端口的读写只能用 in(读入)和 out(写入) 在 in 和 out 指令中,只能使用 ax 或 al 来存放从端口中读入的数据或要发送到端口中的数 据。访问 8 位端口时用 al,访问 16 位端口时用 dx in al, 20h ;从 20h 端口读入一个字节 out 20h,al ;向 20h 端口写入一个字节 mov

19、 dx, 3F8h ;端口号送入 dx(16 位) in al, dx ;读入一个字节 out dx, al ;写入一个字节 第十五章 外中断 PC 机键盘处理过程 扫描码端口为 60h,断码 = 通码 + 80h 键盘输入到达 60h 端口时,相关芯片发送 9 号中断,如果这时 IF=1,则响应中断 BIOS 提供 int 9 中断例程,用来进行基本的键盘输入处理 1.读出 60h 端口中的扫描码 2.如果时字符键的扫描码,将扫描码对应的 ASCII 码送入内存中 BIOS 键盘缓冲区;如果是 控制键,将其转为状态字节写入 0040:17 单元 BIOS 键盘缓冲区中,一个键盘输入用一个字单

20、元存放,高位存放扫描码,低位存放 ASCII 码 状态字节含义: 0 右 shift,1 表按下 1 左 shift,1 表按下 2 ctrl,1 表按下 3 alt,1 表按下 4 ScrollLock,1 表灯亮 5 NumLock,1 表灯亮 6 CapsLock,1 表输入大写字母 7 Insert,1 表处于删除状态 第十六章 直接定址表 a db 1,2,3 以这种方式定义的标号 a 不但表示内存单元的地址,还表示内存单元的长度,即 a 处单元 是一个字节单元 mov al, asi 相当于 mov al, cs:0si mov al, a3 相当于 mov al, cs:03 a

21、ssume 将标号所在段和一个段寄存器联系起来,否则编译时无法确定标号的段地址 assume ds:data data segment a db 1,2,3 b dw 0 data ends code 段中可以使用 mov al, asi 相当于 mov al, si seg 取得标号的段地址 a db 1,2 b dw 0 c dd a,b ;相当于 c dw offset a, seg a, offset b, seg b int 16h 读取键盘缓冲区 mov ah, 0 int 16h int 13h 对磁盘进行读写 (ah=int 13h 的功能号,2-读扇区,3-写扇区 (al=读取/写入的扇区数 (ch=磁道号 (cl=扇区号 (dh=磁头号(面) (dl=驱动器号 0:软驱 A 1:软驱 B 80h:硬盘 C 81h:硬盘 D es:bx 指向数据区,读入/写入的数据 返回值:(al=读入/写入扇区数,(ah=返回码,0 表成功 本 文 来 自 CSDN 博 客 , 转 载 请 标 明 出 处 :

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1