目录 上一页 下一页 下一章

-66- PC机汇编语言实战精解




main
code

mov
int
int
endp
ends
end
dl,byte ptr crlf+1
21h
20h


main
  指令"MOV DL,BYTE PTR CRLF"明确地告诉编译系统程序要从地址"CRLF"处取得一个"BYTE"。
  举这个例子只是为说明"PTR"操作符的用途,并非显示什么算法。说实在的,对于上面这个问题来讲最简单的方法就是将"CRLF DW 0D0AH"改为:"CR EQU 0DH"和"LF EQU 0AH"。这样可以缩减程序的长度,而且也不必使用"PTR"操作符。
  理解了"PTR"操作符,我们就可以更深入的讨论一下ADD和SUB这两条指令,请考虑一下这样两条指令是否正确:"ADD BL,WORD PTR [0200]"、"SUB AX,BYTE PTR [3000]"。
  先设想一个结论,再用DEBUG检验设想的结论,然后总结出这两条指令在应用时的注意事项。
  至于-1和255之间的关系,将在下面一节中详细讲解。
4.3 数字的表示
  第一章中已经讲过一些二进制数与十六进制数的知识,现在我们要对已有的知识做些扩充,最重要的一个问题就是二进制数是如何表示"符号"的。
  这个问题并不复杂,表示一个带符号的整数常用的方法有三种:原码、反码表示法和补码表示法。先来看看原码表示法。在计算机中,数的符号是用一个数位来表示的,一般用数的最高位。正号用0表示,负号用1表示。所谓原码,就是简单地遵循这一规定的一种表示法。例如我们用原码表示+1,可以写成00000001,其最高位是0,表明这个数的符号是"+"。如果表示-1,则可以写成"10000001",最高位的"1"就表示其符号为"―"。这种表示带符号数的方法法就是原码表示法。
  反码比原码复杂一些,它规定若一个数值为正,则它的反码和原码形式相同。如+1仍写成"00000001";若一个数值为负,则反码的符号位为1,其余各位对原码取反。如-1写成"11111110";这两种方法在计算机中很少采用,原因很简单,原码和反码不便于运算。举个例子:用原码计算-1+1=?
  问题似乎不难,但需要考虑的事情很多。假如只是简单地在"10000001"的最低位加上1,那么将得到结果--10000010,根据原码的规定,这个结果是-2。
  要想得到正确结果,我们必须首先要考虑将符号位置0,同时最低位也不能加1,而要减1。即使采用反码计算,也要单独处理其符号。这样计算不仅对我们自己,就是对CPU来说也是不方便的。因此,多数机器都采用补码表示法。
  在补码表示法中对于负数的表达要比反码麻烦一些,负数X用"2n-|X|"表示,其中"n"是数的位数。对于八位二进制数来讲n=8,因此用八位二进制补码表示-1就是28-1=11111111,也就是十六进制数0FFH。正数的表示方法和原码一样,+1也写成"00000001"。

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章