首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmp指令和负数

cmp指令和负数
EN

Stack Overflow用户
提问于 2022-04-16 18:12:23
回答 1查看 183关注 0票数 0

下面是用汇编语言对给定数组进行排序的代码

代码语言:javascript
复制
.model small
.stack 100h

.data           ;roll number 2435
data1 db 66h, 2, 045h, 4, 040h, 3, -025h, 5, -010h, 011h
swap db 0
.code
mov ax, @data
mov ds, ax
start:
mov swap, 0
mov bx, 0
loop1:
mov al, [bx+data1]
mov cl, [bx+data1+1]
cmp al, [bx+data1+1]      ;here is the problem when compare 66h with -025h
jbe noswap

mov dl, [bx+data1+1]
mov [bx+data1+1],al
mov [bx+data1], dl
mov swap, 1
noswap:
add bx,1
cmp bx,9
jne loop1

cmp swap,1
je start
mov ah, 04ch
int 21h

它将数组的所有元素按升序排序,但当它将66h与-025h进行比较时,它意味着66h较小,-025h更大且不交换,mov为无交换的lable

我已经调试了它,并发现在后端-025h被存储为DB。如何用负数对数组进行适当排序

EN

回答 1

Stack Overflow用户

发布于 2022-04-16 18:29:50

使用条件分支中的有符号条件代码:例如,jle,而不是无符号条件代码jbe。见https://sandpile.org/x86/cc.htm。如果您要求处理器执行无符号条件,那么它将看到-025h为0xDB,即219,大于66h/102。

处理器不读取数据声明,所以它看不到减号。由于它从不看到声明,所以如果您将db -25hdb 219db 0xdb放入处理器,这一切都将以相同的位模式值填充数据。

例如,在C中,我们给变量类型,然后编译器(使用语言规则)生成一致访问变量的机器代码,即声明变量的大小,以及是否有符号或无符号。

在汇编语言中,我们没有带有表现性类型信息的变量声明。因此,我们必须完成编译器所做的工作:在机器代码中为每次访问变量使用适当的大小和符号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71896358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档