用X86语言,写自BLOCK开始的存储区中, C 有10个带符号字数据凌乱无序,试编 制一个程序把它们降序排列,并显示
时间: 2023-06-24 13:06:48 浏览: 111
下面是用X86汇编语言编写的程序,可以对存储区中的10个带符号字数据进行降序排列,并将结果显示出来:
```assembly
section .data
array dw 123, -456, 789, 0, -12, 34, -567, 890, -1234, 5678
size equ ($ - array) / 2
section .text
global _start
_start:
; 将数组地址存入 SI 寄存器
mov si, array
; 外层循环,共进行 size-1 次迭代
mov cx, size
dec cx
outer_loop:
; 将数组地址存入 DI 寄存器
mov di, si
; 内层循环,从第二个元素开始比较
mov bx, cx
inner_loop:
; 比较当前元素和前一个元素的大小
mov ax, [di]
mov dx, [di - 2]
cmp ax, dx
; 如果当前元素比前一个元素小,则交换它们的值
jg not_swap
xchg ax, dx
mov [di], ax
mov [di - 2], dx
not_swap:
; 继续比较下一个元素
sub di, 2
dec bx
jnz inner_loop
; 准备进行下一轮迭代
add si, 2
dec cx
jnz outer_loop
; 将排序后的数组输出到屏幕上
mov si, array
mov cx, size
print_loop:
; 将当前元素的值转换为字符串并输出
mov ax, [si]
call print_signed
; 输出一个空格
mov dl, ' '
mov ah, 02h
int 21h
; 准备输出下一个元素
add si, 2
dec cx
jnz print_loop
; 退出程序
mov ah, 4ch
int 21h
; 将带符号整数转换为字符串并输出
; 输入:AX = 带符号整数
; 输出:无
print_signed:
; 如果数值为负,则输出负号并取相反数
cmp ax, 0
jge not_negative
neg ax
mov dl, '-'
mov ah, 02h
int 21h
not_negative:
; 将数值转换为字符串
push ax
mov bx, 10
xor cx, cx
convert_loop:
xor dx, dx
div bx
push dx
inc cx
cmp ax, 0
jne convert_loop
; 从栈顶弹出数字并输出
output_loop:
pop dx
add dl, '0'
mov ah, 02h
int 21h
loop output_loop
; 输出一个换行符
mov dl, 0ah
mov ah, 02h
int 21h
; 恢复栈指针
add sp, cx
ret
```
这个程序使用了冒泡排序算法对数组进行排序,然后使用了带符号整数转换为字符串的函数将排序后的结果输出到屏幕上。你可以将这个程序保存为一个文件,然后使用汇编器和链接器将它编译成可执行文件,然后运行它来看到排序后的结果。
阅读全文