汇编语言8086 - 无法添加相对数量

时间:2016-11-22 14:14:46

标签: assembly

几个月前我刚刚开始学习集会,我想为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行)

为什么会出现此错误,如何解决问题,谢谢!

1 个答案:

答案 0 :(得分:0)

解决问题的方法是使用索引寄存器SIDI而不是变量,例如(复制粘贴它来测试它):

.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
相关问题