Введите и отобразите вектор в сборке x86 - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь изучить TASM Assembly, и мне нужна ваша помощь.Я сделал этот код, который вводит вектор с клавиатуры и затем отображает его на экране с суммой элементов.Проблема в том, что когда он отображается, он отображает некоторые странные символы, но сумма работает.Надеюсь, вы можете помочь мне

TITLE vectors
.model small
.stack 100H 
.data
        msg1   db 10,13,"Enter the lenght of the vector$"   
        msg2   db 10,13,"Enter the vector elements $"    
        msg4   db 10,13,"The sum is $"
        msg3   db 10,13,"The entered vector is $"
        msg5   db "  $"
        vector db 0
        sum    db 0
        x      db 0
.code

main PROC
    MOV ax,@data    
    MOV ds,ax
    MOV ah,9h
    LEA dx, msg1   
    int 21h               
    MOV ah,1h             
    int 21h    
    LEA Si,vector
    MOV cl , al 
    MOV x,al
    SUB cl , 30h  
    MOV sum , 0 
  Introducere:
    MOV ah, 9h
    LEA dx, msg2  
    int 21h
    MOV ah,1h 
    int 21h
    SUB al,30h     
    MOV [Si] , al  
    ADD Si, 1       
    ADD suma,al            
    DEC cl           
    JNZ Introducere  
    JZ Afisare1             
  Afisare1:
    MOV ah,9h
    LEA dx, msg3
    int 21h   
    MOV cl,x
    SUB cl,30h  
    LEA Si,vector  
    JMP Afisare2
  Afisare2:
    MOV dx,[Si]
    ADD dx,30h
    MOV ah,2h
    int 21h
    LEA dx,msg5  
    int 21h
    INC Si
    DEC cl
    JNZ Afisare2
    JZ Afisare3
  Afisare3:
    MOV ah,9h
    LEA dx,msg4  
    int 21h
    MOV dl,sum
    ADD dl,'0' 
    MOV ah,2h   
    int 21h
    MOV ah,04ch  
    int 21h
main ENDP
END main

1 Ответ

0 голосов
/ 25 ноября 2018

Проблема в том, что когда он отображается, он отображает некоторые странные символы, но сумма работает.

Эти странные символы появляются из-за отсутствия необходимого номера функции для отображения вашего msg5 .В настоящее время вместо того, чтобы показать хорошее разделительное пространство, вы получаете вывод младшего байта из адреса msg5 .

MOV ah,2h
int 21h
LEA dx,msg5
                <<<<< Here is missing `mov ah, 09h`
int 21h
vector db 0
sum    db 0
x      db 0

С этим определениемиз vector вы резервируете только 1 байт для хранения ваших входных данных.Этого не достаточно!Поскольку вся ваша программа работает с однозначными числами, длина вектора может варьироваться от 1 до 9. Поэтому вам необходимо внести следующие изменения:

vector db 9 dup (0)   ;This reserves 9 bytes
sum    db 0
x      db 0

Поскольку вся ваша программа работает с однозначными числамичисла и что вы выводите сумму как однозначное число также , вы не можете быть слишком щедрыми со значениями для введенных чисел.Вот пример, который будет работать:

Enter the lenght of the vector3       <<<<< You're missing a space character here!
Enter the vector elements 2
Enter the vector elements 5
Enter the vector elements 1
The entered vector is 2 5 1 
The sum is 8
...