2015-11-18 2 views
0

У меня есть небольшая проблема с моей программой. я должен интеркаляции элементы двух строк, так что если у меня естьинтеркалированные элементы двухрядных узлов 8086

S1: 1, 3, 5, 7
S2: 2, 6, 9, 4

это приведет к D: 1, 2, 3, 6, 5, 9, 7, 4.

Это то, что я сделал до сих пор, и я понятия не имею, как это исправить, любая помощь, пожалуйста?

assume cs:code, ds:data 

data segment 
s1 db '1357' 
s2 db '2694' 
l1 EQU ($-s1) 
l2 EQU ($-s2) 
d db (l1+l2) dup (?) 
data ends 

code segment 
start: 
mov ax,data 
mov ds,ax 

mov si,offset s1 
mov cx,l1 
mov bx, 0 
frst: 
    mov ax,[si] 
    mov [di]+[bx],ax 
    inc si 
    add bx,2 
loop frst 
mov si, offset s2 
mov cx,l2 
mov bx,1 

scnd: 
    mov ax,[si] 
    mov [di]+[bx],ax 
    inc si 
    add bx,2 
loop scnd 

mov ax,4c00h 
int 21h 
code ends 
end start 
+0

_ «Я не знаю, как исправить это» _. Исправить _what_? Вы не объяснили, в чем проблема. – Michael

+1

Не следует ли 'l1' быть на одну строку выше, так что это следует за' s1'? –

+1

'mov [di] + [bx], ax' --- вы не установили' di' возможно 'mov di, offset d' –

ответ

2

Есть несколько ошибок в коде, во-первых

s1 db '1357' 
s2 db '2694' 
l1 EQU ($-s1) 
l2 EQU ($-s2) 

получает длину s1 неправильно, он должен быть

s1 db '1357' 
l1 EQU ($-s1) 
s2 db '2694' 
l2 EQU ($-s2) 

Во-вторых, di используется, но не инициализирована, вставки

mov di, offset d 

перед первым циклом. Затем массивы данных имеют значения byte, определенные db, но вы загружаете и сохраняете регистр ax. Это должен быть регистр al, так как

mov al,[si] 
mov [di]+[bx],al 

 Смежные вопросы

  • Нет связанных вопросов^_^