注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Search的博客

不断学习中!

 
 
 

日志

 
 

汇编语言笔记  

2012-04-17 22:43:22|  分类: 汇编语言学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
循环控制指令
转移指令 无条件转移指令,条件转移指令。
在实际的汇编语言编程中,汇编程序会根据具体的目标地址的范围生成短转移,近转移,和远转移。同样程序员可以使用
short,near ptr,far ptr来进行强制转换。
段内近转移,在段内当前地址的64kb内进行跳转,不需要改变段基值。在实模式下进行寻址,由于8086寄存器位16位的,
所以不能够完全对1mb的内存空间进行访问,于是乎,就有了分段的概念,也就是说20位逻辑地址,16位为段基值,一段最多有64
kb,所以只能在64kb内进行跳转。
段内段转移,转移范围可以用一个八位的二进制进行表达,在段内的-128---+127内进行跳转。
段间远转移,可以在不同的段间进行转移,需要同时改变段基值和ip值,可以在1mb的范围内进行转移。目标地址必须使用
一个32位的数进行表示,叫做32位的远指针,也就时32位的逻辑地址。这是由于我们一般进行讨论的时8086系统的计算机,
8086计算机有20位地址线,共可以表示1mb的空间。
如何判断是否溢出?
求补指令的用法?
无符号数与有符号数的区别,是不是说有符号数有正负之分,而无符号数没有?
cmp指令可以用于比较两个数的大小,对于无符号数来说只要一位标志位就可以判断:两个无符号数进行比较,如果zf为1,
两数相等,如果cf为为0,dst大于src,否则小于sfc。如果对于有符号数来说,则需要两个标志位才能够比较出两数的大小
如果sf和of相等则dst大于src。
对于乘法指令来说,如果8位与8位相乘,则得到16位,把16位的结果存入ax,如果16位与16位相乘,则得到32位,把32位的数值
的高十六位存入dx,低16位存入ax。对于乘法指令来说,利用of和cf来校验高16位是否有效,如果of=cf=1,有效,of=cf=0无效。
除法指令,字节量除法,ax%r8/m8,8位商存入al,8位余数存入ah,字量除法dx.ax%r16/m16,16位商存入ax,16位余数存入dx,
除法指令对于标志位并没有影响,并且可能会产生结果溢出。
用乘法指令来实现32位二进制数的相乘。
栈应该如何进行定义?dup?offset什么意思?
书上说溢出标志表示补码的运算是否发生溢出,为什么表示补码运算?
字单元的地址可以位奇数,也可以为偶数,但是由于机器对于字单元的访问是以偶地址进行的,所以一般来说字单元的地址位偶数。
逻辑地址的来源可以有一下情况,cs+ip,ss+sp;(cs,ds,es,ss)+(si/di);ss+sp;
实模式下的寻址,逻辑地址:段基值加上段内偏移量。1md的访问空间。
保护模式下的寻址,可以访问4gb的内存空间。
堆栈段的构造,sp指向bottom的下一位。
word ptr?neg?
逻辑移位指令,逻辑移位指令shl/shr将移出的位赋值给cf,空余位补0;算术移位指令,sal与shl一样,sar有所区别,虽然也是将
移出的位赋值给cf,但是在移动的过程中要保持最高位不发生改变。
循环移位指令(小循环),就是将移出的值同时赋值给cf和空出的值。
循环移位指令(大循环),就是将cf和移出的值按顺序赋值给空出的位。

  评论这张
 
阅读(198)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017