Я не видит никакой ошибки вообще, код будет суммировать массив, отобразить некоторые случайные sh * t и выйти.
Возможно, вы хотите отобразить результат по сумме товаров?
int 21h, ah=9
отобразит '$'
завершенную строку из памяти, на которую указывает dx
.
Так что вам нужно две вещи, преобразовать число в [sum]
в строку завершенного '$'
в конце, а затем установите dx
в преобразованной строке перед этой int 21h
.
Вы можете попытаться извлечь number2string
процедуру здесь: https://stackoverflow.com/a/29826819/4271923
Я бы лично изменить его взять адрес целевого буфера в si
в качестве еще одного аргумента вызова (т.е. просто удалить mov si,offset str
из тела процедуры.). Как это:
PROC number2string
; arguments:
; ax = unsigned number to convert
; si = pointer to string buffer (must have 6+ bytes)
; modifies: ax, bx, cx, dx, si
mov bx, 10 ; radix 10 (decimal number formatting)
xor cx, cx ; counter of extracted digits set to zero
number2string_divide_by_radix:
; calculate single digit
xor dx, dx ; dx = 0 (dx:ax = 32b number to divide)
div bx ; divide dx:ax by radix, remainder will be in dx
; store the remainder in stack
push dx
inc cx
; loop till number is zero
test ax, ax
jnz number2string_divide_by_radix
; now convert stored digits in stack into string
number2string_write_string:
pop dx
add dl, '0' ; convert 0-9 value into '0'-'9' ASCII character encoding
; store character at end of string
mov [si], dl
inc si
; loop till all digits are written
dec cx
jnz number2string_write_string
; store '$' terminator at end
mov BYTE PTR [si],'$'
ret
ENDP
Тогда назвать это в вашей EndLoop
вам нужно добавить в сегмент данных numberStr DB 8 DUP (0)
иметь некоторый буфер памяти, выделенный для строки и добавить в код:
; load sum as 16b unsigned value into ax
xor ax,ax ; ax = 0
mov al,[sum] ; ax = sum (16b zero extended)
; convert it to string
mov si,OFFSET numberStr
call number2string
; display the '$' terminated string
mov dx,OFFSET numberStr
mov ah,9
int 21h
; ... exit ...
Обратите внимание, что строка: добавить al, [bx] на самом деле mov al, [bx] –
Я думаю, что краткое объяснение здесь: http://stackoverflow.com/help/how-to-ask (На данный момент непонятно, что вы просите) Плюс для сборки всегда помогает указать, какая ваша целевая платформа/ОС для запуска кода и какой ассемблер вы используете для его компиляции (не стесняйтесь даже скопировать используемые строки команд, поэтому даже тех, которые могут помочь решить проблемы). – Ped7g
Я имею в виду, что есть немного людей, которые будут смотреть на ваш источник и иметь одну и ту же среду, чтобы они могли просто скопировать/вставить его, скомпилировать и увидеть вашу проблему вживую.Большинство людей здесь будут использовать свои знания и опыт, чтобы сделать «сухой пробег» в своей голове, и чтобы облегчить им работу, вы должны предоставить все необходимые детали (просто представьте себе, что вы читаете свой вопрос с нулевым знанием о том, как выглядит ваша установка). – Ped7g