-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 |