汇编语言编写代码:把从MEM单元开始的100个16位无符号数按从大到小的顺序排列。
时间: 2023-05-25 21:04:22 浏览: 311
利用汇编语言编写找出10个无符号数中最大数和最小数分别存储程序.doc
假设这100个16位无符号数存储在从$MEM$单元开始的连续空间中,我们需要进行以下步骤来实现排序程序:
1. 用$SI$和$DI$寄存器分别指向待排序的第一个数和下一个数,用$CX$寄存器记录还需要进行比较的数的数量,初始化为100。
2. 进入排序循环,每次循环比较$SI$和$DI$指向的数的大小,如果$SI$指向的数大于$DI$指向的数,就将它们交换。
3. 每次比较后$DI$寄存器加1,$CX$寄存器减1,如果$CX$不为0就返回第2步继续比较。
4. 在排序循环之后,待排序的100个数就已经按照从大到小的顺序排列好了。
下面是对应的汇编代码:
```assembly
SECTION .DATA
MEM DB 100 DUP(0) ; 数组存储在MEM单元开始的连续空间中
SECTION .TEXT
MOV SI, OFFSET MEM ; SI指向第一个数
MOV DI, SI ; DI指向下一个数
ADD DI, 2 ; DI跳过第一个数
MOV CX, 99 ; 还需要比较99个数
SortLoop:
MOV AX, WORD[SI] ; AX = MEM[SI]
CMP AX, WORD[DI] ; AX - MEM[DI]
JGE Continue ; 如果AX >= MEM[DI]就跳过交换
; 交换两个数
XCHG AX, WORD[DI]
MOV WORD[SI], AX
Continue:
ADD DI, 2 ; DI指向下一个数
LOOP SortLoop
; 排序完成
```
阅读全文