汇编学习(王爽) 速查笔记

第一章 基础知识

  1. 机器语言 是 机器指令的集合
  2. 汇编语言的组成:
    • 汇编指令:机器码的助记符,有对应机器码
    • 伪指令:没有对应机器码,由编译器执行,计算机并不执行
    • 其他符合:由编译器识别,没有对应的机器码
  3. CPU从单元中读取数据过程
    • CPU通过地址线 将地址信息发出
    • CPU通过控制线发出内存读命令
    • 存储器将单元中的数据通过数据线送入CPU
    • (写命令同理,控制线发出写命令)
  4. 地址总线的宽度决定了CPU的寻址能力
  5. 数据总线的宽度决定了CPU与其他器件传送时的一次数据传送量
  6. 控制总线的宽度决定了CPU对系统其他器件的控制能力(数量 功能等)
    在这里插入图片描述

第二章 寄存器

第九章 转移指令的原理

转移指令的原理

转移分类

段间转移 (远转移)

		jmp dword ptr 内存单元地址 
		jmp far ptr 标号    
		jmp  16位寄存器  (寄存器内存有地址  高字位 cs    低字位 ip)

段内转移

			jmp word ptr 内存单元地址 (段内转移)

短转移

			jmp short 标号       ;段内短转移   前128 后127 

近转移

			jmp near ptr  标号   ;段内近转移   16位 32768 32767

其他

		jcxz  标号

if ((cx)==0) jmp short 标号

		loop  标号

(cx- -);
if ((cx)≠0) jmp short 标号

相关说明

转移是原理相对位移的编译成机器码后 机器码存储的是
目标地址 - 指令后的第一个字节的地址

其他

	操作符 offset  

取得标号的偏移地址

显存相关

  • 内存地址空间中, B8000H ~B8FFFFH 共32k 空间
  • 显示器显示25行 每行80个字符 每个字符256种属性2字节
  • 显示缓冲区分为8页 每页4k 默认显示第0页
  • 一个字符 低字节位存储 ASCLL码 高字节位存储属性

第十章 CALL和RET指令

RET

1 ret 近转移
相当于pop ip
2 retf 远转移
相当于pop ip
    pop cs

CALL

1 call 标号 (根据位移转移)
相当于 push ip
  jmp near ptr 标号

2 call far ptr 标号 (段间转移)
相当于 push cs
   push ip
   jmp far ptr 标号

3 call 16位reg
相当于
push ip
jmp 16位reg

4 call word ptr 内存单元地址
相当于
push ip
jmp Word ptr 内存单元地址

5 call dword ptr 内存单元地址
相当于
push cs
push ip
jmp dword ptr 内存单元地址

CALL与RET指令配合使用说明

子程序框架:

子程序开始:
   子程序中使用的寄存器入栈
   子程序内容
   子程序中使用的寄存器出栈(注意顺序
   返回(ret ,retf)
例子:

captial:
		push cx
		push si

change: 
		mov cl,[si]
		mov ch,0
		jcxz ok
		and byte ptr [si],11011111b
		inc si
		jmp short change

ok:
		pop si
		pop cx
		ret

MUL指令

1mul 乘法指令 两个乘数位数相同 同8位 或 同16 位
2同8位 :
   一个乘数默认在al中 另一个在8位 寄存器或内存字节单元中结果在ax中
3同16位:
   一个乘数默认在ax中 另一个在16位寄存器或内存字单元中结果 高字位在dx中 低字位在ax中

第十一章 标志寄存器

标志寄存器简介

  • ZF 标志: 零标志位, 第6位 记录指令执行后结果是否为0   是=1 否=0
  • PF 标志: 奇偶标志位 第2位  记录指令执行后结果所有bit中1的个数是否为 偶数   是=1 否=0
  • SF 标志: 符号标志位 第7位 记录指令执行后结果是否为负   是=0  否=0
  • CF 标志: 进位标志位(无符号) 第0位 记录运算结果的进位值
  • OF 标志: 溢出标志位(有符号) 第11位  记录有符号运算是否溢出   溢出=1 
  • DF 标志: 方向标志位  第10位  记录操作后的  方向   递增=0    递减=1

备注 : DF标志  cld 指令  将DF 置0      std指令   将 DF 置1

相关指令介绍

  • adc 指令 : 带进位加法指令

指令格式: adc   操作对象1 , 操作对象2

功能: 操作对象1=  操作对象1 +操作对象2 + CF

备注:  常用于超大数加法

  • sbb 指令: 带进位减法指令 

指令格式: sbb   操作对象1 , 操作对象2

功能: 操作对象1=  操作对象1 - 操作对象2 - CF

备注:  常用于超大数减法

  • pushf 指令: 将标志寄存器指令压栈
  • popf 指令: 从栈中弹出数据送入标志寄存器
  • movsb :串传送指令     mov es:di , ds;si     字节传送        
  • movse: 串传送指令     mov es:di , ds;si     字传送        

 一般结合rep指令   格式: rep movsb

  汇编描述:     s:movsb

                        loop s

  • cmp 指令: 比较指令  功能相当于减法  但不保存结果 对标志寄存器产生影响

指令格式: cmp  操作对象1 , 操作对象2

功能: 计算  操作对象1 - 操作对象2   但不保存结果  根据结果对标志寄存器进行设置hiz

备注:  

ZF=1则AX=BX
ZF=0则AX!=BX
CF=1则AX<BX
CF=0则AX>=BX
CF=0并ZF=0则AX>BX
CF=1或ZF=1则AX<=BX

1)如果SF=0而OF=0说明没有溢出逻辑上真正结果的正负=实际结果的正负,因实际结果为负所以逻辑上真正的结果为负则ah<bh
2)如果SF=1而OF=1说明实际结果为负并且有溢出,则实际结果和真正结果不等,因SF=1实际结果为负。则: 如果因为溢出导致了实际结果为负。那么逻辑上真正的结果必然为正。ah<bh
3)如果SF=0而OF=1说明实际结果为正并且有溢出,则实际结果和真正结果不等,因SF=0,实际结果非负。则:如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必然为负。这样说明ah<bh
4)如果SF=0而OF=0说明没有溢出逻辑上真正结果的正负=实际结果的正负,因SF=0实际结果非负,所以逻辑上真正的结果非负,所以ah>=bh

  • 检测比较结果的条件转移指令

指令                     含义                    检测的相关标志位

je                    等于则转移                zf=1

jne                  不等于则转移              zf=0

jb                   低于则转移                  cf=1

jnb                  不低于则转移               cf=0

ja                    高于则转移                  cf=0且zf=0

jna                   不高于则转移               cf=1或zf=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值