几个月前我刚刚开始学习集会,我想为Uni的作业提供一些帮助。
问题陈述是:
Being given a string of bytes, sort it ascending
我的代码是:
assume cs:code,ds:data
data segment
S1 db 2, 4, 2, 5, 2, 2, 4, 4 ;given string
L1 EQU $-S1
index1 db 0
index2 db 0
cont db 0
data ends
code segment
start:
mov AX,data
mov DS,AX
sort1:
inc index1
sort2:
inc index2
cmps S1[index1],S2[index2]
jg switch
jng fin1
switch:
mov S1[index1],AL
mov S1[index2],AH
mov S1[index1],AH
mov S1[index2],AL
fin1:
cmp index2,L1
JL sort2
JNL sort1
mov ax, 4C00h
int 21h
code ends
end start
问题在于,当我使用 Turbo Debugger 编译它时,它会提示错误“无法添加相对数量' (准确地说,在第22,28,32,33,34,35行)
为什么会出现此错误,如何解决问题,谢谢!
答案 0 :(得分:0)
解决问题的方法是使用索引寄存器SI
和DI
而不是变量,例如(复制粘贴它来测试它):
.model small
.stack 100h
.data
S1 db 3, 1, 9, 7, 8, 6, 4, 5 ;given string
L1 EQU $-S1
.code
start:
mov AX,@data
mov DS,AX
mov si, offset S1 ;◄■■ INSTEAD OF INDEX1.
sort1:
mov di, si ;◄■■ INSTEAD OF INDEX2.
inc di ;◄■■ DI = SI+1.
sort2:
mov AL, [si]
mov AH, [di]
cmp AL, AH
jng fin1
switch:
mov [si],AH
mov [di],AL
fin1:
inc di
cmp di, L1 ;◄■■ LAST ITEM.
jbe sort2 ;◄■■ IF DI <= LAST ITEM
inc si
cmp si, l1-1 ;◄■■ LAST-1 ITEM.
jbe sort1 ;◄■■ IF SI <= LAST-1 ITEM
mov ax, 4C00h
int 21h
code ends
end start