2016-03-31 5 views
0

Ich bin neu in Assembler Language, arbeiten an TASM, müssen die Nummern in aufsteigender Reihenfolge sortieren. Der Code ist einfach, aber ich muss von der Tastatur die Anzahl der Elemente des Arrays lesen und sie dann auch von der Tastatur einfügen. Das Problem ist, dass alles, was Sie tippen, im ASCII-Code angezeigt wird, und ich habe keine Ahnung von der Konvertierung. Wie kann ich lesen?Lesen von Elementen eines Arrays aus der Tastatur Assembler

Vielen Dank im Voraus!

Sortierung 5 Zahlen

.MODEL SMALL 
.DATA 
NUM DW 42H,34H,26H,17H,09H 
LEN EQU 05H 

.CODE 
START: 
MOV AX,@DATA 
MOV DS,AX 
MOV BX,LEN-1 ;Initialize BX as the counter for loop UP 
MOV CX,BX  ;Initialize CX as the counter for loop UP1 

UP1: MOV BX,CX 
LEA SI,NUM ;SI points to the first number in NUM 

UP: MOV AX,[SI] 
MOV DX,[SI+2] 
CMP AX,DX 
JB DOWN   ;no swapping if [SI] less than [SI+2] 
MOV [SI],DX 
MOV [SI+2],AX ;swap the numbers pointed by SI and SI+2 
       ;if [SI] is greater than [SI+2] 

DOWN: 
INC SI 
INC SI  ;increment SI to point to next dataword(number) 
DEC BX 
JNZ UP 

DEC CX 
JNZ UP1 

MOV AH,4CH 
INT 21H 
END START 
END 

Antwort

0

Sie in der Zeichenfolge zu lesen, und wandeln sie - char von char. die algorith wie diese

beschrieben werden könnte
for each digit in String 
    value *= 10 
    value += value(digit) 

krank geben Sie eine Probe:

string "4132" 

"4" is a digit, so value = 10*value (= 0) + digit (= 4) 
"1" is a digit, so value = 10*value (= 40) + digit (= 41) 
"3" is a digit, so value = 10*value (= 410) + digit (= 413) 
"2" is a digit, so value = 10*value (=4130) + digit (=4132) 
no more digits, we're done