2016-03-31 21 views
0

Assembler Dilinde yeniyim, TASM üzerinde çalışıyorum, sayıları artan düzende sıralamalı. Kod basit, ancak klavyeden dizinin elemanlarının sayısını okumalı ve sonra bunları klavyeden de eklemeliyim. Sorun şu ki yazdığınız her şey ASCII kodunda görülüyor ve dönüşüm hakkında hiçbir fikrim yok. Okumayı nasıl yapabilirim?Klavye Assembler'den bir dizinin elemanlarını oku

Teşekkürler!

Sıralama 5 numaraları

.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 

cevap

0

Eğer dizede okuyun ve dönüştürmek - Char tarafından. olarak algoritma bu

for each digit in String 
    value *= 10 
    value += value(digit) 

gibi tarif edilebilir hasta sana bir örnek vermek:

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 
İlgili konular