.MODEL SMALL
.STACK 100h
.DATA
; массивы
mas1 db 2,3,1,1,4,5,2,1,2,2
mas2 db 4,1,1,4,4,3,3,5,1,2
msg1 db 'Mas1 > Mas2', 13, '$'
msg2 db 'Mas2 > Mas1', 13, '$'
sum1 dw 0
sum2 dw 0
count equ 10
.CODE
start:
; текущий индекс массива
mov ax, 0
; кол-во повторений цикла
mov cx, count
l1:
mov bx, mas1[ax]
add sum1, bx
inc ax
loop l1
mov ax, 0
l2:
mov bx, mas2[ax]
add sum2, bx
inc ax
loop l2
cmp sum1, sum2
JG end1
JL end2
end2:
; выводим строку
lea dx, [msg2]
mov ah,9h
int 21h
; ждем пока пользователь не нажмет какой нибудь символ
mov ah,1h
int 21h
; выход в ос
ret
end1:
; выводим строку
lea dx, [msg1]
mov ah,9h
int 21h
; ждем пока пользователь не нажмет какой нибудь символ
mov ah,1h
int 21h
; выход в ос
ret
end start
Помогите с задачей
Смысл такой: есть два массива по 10 элементов, они содержат однобайтовые целые числа без знака нужно определить двухбайтовую сумму эл-тов массивов, какого массива больше, и вывести на экран строку с соответствующим сообщением
Код:
Но, навсякий случай подскажу:
1. Нет инициализации сегментного регистра ds
2. Это попытка присвоения элемента массива размером в 1 байт двухбайтному регистру bx.
3. Неправильная индексация (не тем регистром) массива.
4. Перед суммированием второго массива не инициализируется cx.
5. Перевод строки - в DOS и Windows - два символа - 13, 10.
Код:
.MODEL SMALL
.STACK 100h
.DATA
; массивы
mas1 db 2,3,1,1,4,5,2,1,2,2
mas2 db 4,1,1,4,4,3,3,5,1,2
msg1 db 'Mas1 > Mas2', 13, 10, '$'
msg2 db 'Mas2 > Mas1', 13, 10, '$'
sum1 dw 0
sum2 dw 0
count equ 10
.CODE
start:
mov ax, @data
mov ds, ax
; текущий индекс массива
mov bx, 0
; кол-во повторений цикла
mov cx, count
l1:
mov al, byte ptr mas1[bx]
cbw
add sum1, ax
inc bx
loop l1
; кол-во повторений цикла
mov cx, count
; текущий индекс массива
mov bx, 0
l2:
mov al, mas2[bx]
cbw
add sum2, ax
inc bx
loop l2
cmp sum1, ax
JG end1
JL end2
end2:
; выводим строку
lea dx, msg2
mov ah,9h
int 21h
; ждем пока пользователь не нажмет какой нибудь символ
mov ah,1h
int 21h
; выход в ос
mov ax, 4c00h
int 21h
end1:
; выводим строку
lea dx, msg1
mov ah,9h
int 21h
; ждем пока пользователь не нажмет какой нибудь символ
mov ah,1h
int 21h
; выход в ос
mov ax, 4c00h
int 21h
end start
.STACK 100h
.DATA
; массивы
mas1 db 2,3,1,1,4,5,2,1,2,2
mas2 db 4,1,1,4,4,3,3,5,1,2
msg1 db 'Mas1 > Mas2', 13, 10, '$'
msg2 db 'Mas2 > Mas1', 13, 10, '$'
sum1 dw 0
sum2 dw 0
count equ 10
.CODE
start:
mov ax, @data
mov ds, ax
; текущий индекс массива
mov bx, 0
; кол-во повторений цикла
mov cx, count
l1:
mov al, byte ptr mas1[bx]
cbw
add sum1, ax
inc bx
loop l1
; кол-во повторений цикла
mov cx, count
; текущий индекс массива
mov bx, 0
l2:
mov al, mas2[bx]
cbw
add sum2, ax
inc bx
loop l2
cmp sum1, ax
JG end1
JL end2
end2:
; выводим строку
lea dx, msg2
mov ah,9h
int 21h
; ждем пока пользователь не нажмет какой нибудь символ
mov ah,1h
int 21h
; выход в ос
mov ax, 4c00h
int 21h
end1:
; выводим строку
lea dx, msg1
mov ah,9h
int 21h
; ждем пока пользователь не нажмет какой нибудь символ
mov ah,1h
int 21h
; выход в ос
mov ax, 4c00h
int 21h
end start