汇编语言标识符的命名规则里面哪些符号表示数据?

我们先来谈谈溢出的问题。在进行有符号数运算的时候,如结果超过了机器所能表示的范围称为溢出。

  那么,什么是机器所能表示的范围呢?
  比如说,指令运算的结果用 8 位寄存器或内存单元来存放,对于 8 位的有符号数据,机器所能表示的范围是 -128~127,同理对于 16 位有符号数据,机器所能表示的范围是 -
  如果运算结果超出了机器所能表达的范围,将产生溢出。
  注意,这里所讲的溢出,只是对有符号数运算而言。含义:我们把运算数当作有符号数的时候,如果超出了最大范围,则把 OF 设置为 1。


  

执行后将产生溢出。因为add a1,99进行的有符号数运算是:


  

而结果197超出了机器所能表示的8位有符号数的范围:-128-127


  

执行后,将产生溢出。因为add a1,088H进行的有符号数运算是:


  

而结果-136超出了机器所能表示的8位有符号数的范围:-128-127
如果在进行有符号数运算时发生溢出,那么运算的结果将不正确。就上面的两个例子来说:


  

add指令运算的结果是((al)=OC5H,因为进行的是有符号数运算,所以al中存储的是有符号数,而C5H是有符号数一59的补码。如果我们用add指令进行的是有符号数运算,则98+99=-59这样的结果让人无法接受。造成这种情况的原因,就是实际的结果197,作为一个有符号数,在8位寄存器al中存放不下。


  

add指令运算的结果是((al)=78H,因为进行的是有符号数运算,所以al中存储的是有符一号数,而78H表示有符号数120。如果我们用add指令进行的是有符号数运算,则-16-120=120这样的结果显然不正确。造成这种情况的原因,就是实际的结果-136,作为一个有符号数,在8位寄存器al中存放不下。
由于在进行有符号数运算时,可能发生溢出而造成结果的错误。则CPU需要对指令执行后是否产生溢出进行记录。
flag的第11位是OF,溢出标志位。一般情况下,OF记录了有符号数运算的结果是否发生了溢出。如果发生溢出,OF=1;如果没有,OF=0
  一定要注意 CF 和 OF 的区别:CF 是对无符号数运算有意义的标志位,而 OF 是对有符号数运算有意义的标志位。另外需要注意的是,一个数可能既是有符号数,也可以是无符号数。也就是说,运算的时候可能会同时影响 CF 和 OF。而对于我们有没有意义倒说不定。前面我们讲过,CPU 在执行 add 等指令的时候,就包含了两种含义:无符号数运算和有符号数运算;对于有符号数运算,CPU 用 CF 位来记录是否产生了进位;对于无符号数运算,CPU 用 OF 位来记录是否产生了溢出。如下所示:


  

  add 指令执行后:CF=1,OF=1。对于无符号数运算,0f0h+88h 有进位,CF=1;对于有符号数运算,0f0h+88h发生溢出,OF=1


  

  我们可以看出,CF 和 OF 所表示的进位和溢出,是分别对无符号数和有符号数运算而言的,它们之间没有任何关系。

计算机汇编语言的一个突出优点就是利用符号 Symbol 来代替目标码 也即大量的二进制代码用符号来表示 使汇编语言源程序容易理解 便于记忆。  在宏汇编语言中所有变量名、标号名、记录名、指令助记符和寄存器名等统称符号 这些符号可通过汇编控制语句的伪操作命令重新命名 也可以通过指令给它定义其它名字及新的类型属性 因而给程序设计带来很大的灵活性 符号是程序员在程序中用来代表某个存储单元、数据、表达式和名字等所定义的..

我要回帖

更多关于 汇编语言标识符的命名规则 的文章

 

随机推荐