汇编中的负数怎么表示?

Systemgoblin 2007-11-23 03:10:23

我想请教一下,如何在汇编中定义一个数为负数。我们知道,用补码可以表示一个数是否为负数,但,汇编中为什么没有提供定义的方式???

比如在C语言下,我们可以写如下代码:

main()
{
int i;
i=-1;
printf("i=%d",i);
}

这就很清楚了,i=-1,那汇编中怎么定义,是不是也和C一样,用这样的语句表示:

abc equ -1

对于人们来说,是很好理解,但是机器是怎么知道这个数就是-1?在16位数中“FFFF”即可以表示正,也可以表示负。那么,让机器区分正与负的机制在哪里???

...全文
5087 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joke_Olive 2007-11-27
  • 打赏
  • 举报
回复
to 7楼:

汇编指令中的操作数,就是二进制编码的机器数,本身并没有标明是无符号数还是有符号数,CPU无法也不需要区分。
区分它们的,是写程序的人。
当你认为它是无符号数时,就用无符号数的指令来处理。
如果你用有符号数指令处理它们时,就表明你是将它们理解为有符号数的。



jvphxys 2007-11-26
  • 打赏
  • 举报
回复
汇编里有命令区分有符号数跟无符号数吧
fhb13 2007-11-25
  • 打赏
  • 举报
回复
写法参照三楼 机器问题看二楼
alan001 2007-11-24
  • 打赏
  • 举报
回复
UP

同意
czlyc006 2007-11-23
  • 打赏
  • 举报
回复
同意2楼的观点,机器并不知道一个数是优符号还是无符号的,只有程序员根据自己的选择取舍运算指令和标志位。
Joke_Olive 2007-11-23
  • 打赏
  • 举报
回复 1
程序里,只需要写 abc equ -1 即可。

它们是什么形式的二进制数形式的编码,由汇编程序在汇编时处理。
是正是负,是数值是字符,则是在运行时由程序指令来解释。

比如:
MOV AL,ABC
这里的ABC会被汇编程序处理成8位的0FFH


MOV AX,ABC
则会被理解成16位的0FFFFH。

如果是
MOV BL,ABC
MUL BL
这个ABC就等于255

如果是
MOV BL, ABC
IMUL BL
这个ABC就是 -1
大熊猫侯佩 2007-11-23
  • 打赏
  • 举报
回复
//对于人们来说,是很好理解,但是机器是怎么知道这个数就是-1?在16位数中“FFFF”
//即可以表示正,也可以表示负。那么,让机器区分正与负的机制在哪里???

机器不区分,而由人来区分。
lxjjoinly 2007-11-23
  • 打赏
  • 举报
回复
用 SBYTE,SWORD,SDWORD,表示有符号数,REAL4,REAL8表示实数
没记大清,好象要386以上指令集

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧