下面是用汇编语言对给定数组进行排序的代码
.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。如何用负数对数组进行适当排序
发布于 2022-04-16 18:29:50
使用条件分支中的有符号条件代码:例如,jle,而不是无符号条件代码jbe。见https://sandpile.org/x86/cc.htm。如果您要求处理器执行无符号条件,那么它将看到-025h为0xDB,即219,大于66h/102。
处理器不读取数据声明,所以它看不到减号。由于它从不看到声明,所以如果您将db -25h、db 219或db 0xdb放入处理器,这一切都将以相同的位模式值填充数据。
例如,在C中,我们给变量类型,然后编译器(使用语言规则)生成一致访问变量的机器代码,即声明变量的大小,以及是否有符号或无符号。
在汇编语言中,我们没有带有表现性类型信息的变量声明。因此,我们必须完成编译器所做的工作:在机器代码中为每次访问变量使用适当的大小和符号。
https://stackoverflow.com/questions/71896358
复制相似问题