2017-01-18 1 views
-1

so muss ich einen grundlegenden Rechner machen (ich habe morgen eine Prüfung), aber ich stecke fest. Ich bekomme zuerst num zu Array, Aktion (+ OR -) und dann die zweite Nummer, die auch zu Array geht (Nummer muss 1-4 Ziffern sein). Wie nehme ich jede Zahl aus dem Array und wandle sie in eine ganze Zahl um (binär), mache die mathematische Aktion und wandle die Antwort in ein Hex und drucke sie? Es muss mit getrennten Funktionen geschehen, und nur wenn der Benutzer 0 eingibt, wenn die Nachricht erscheint, die erste Nummer einzugeben, wird das Programm beendet. Das ist mein Code, ich hoffe, Sie verstehen meine Frage und meinen Code (ich konnte nichts finden, was ich im Internet suche). Dank :)Assembly-Rechner (Sub & Addition) mit Funktionen und Arrays

data segment         
entr_first db 'Please enter first num 1-4 digits:',0ah,0dh,'$' 
select_op db 'Please enter operation type + or -:',0ah,0dh,'$' 
entr_sec db 'Please enter second num 1-4 digits:',0ah,0dh,'$' 
ans db 'Your answer is: $' 
num1 db 7 dup('5') 
num2 db 7 dup('5') 
answer db 8 dup('6') 
opr db 1 dup('0') 
data ends 
sseg segment stack 
sseg ends 
code segment 
assume cs:code,ds:data,ss:sseg 
main: mov ax,data 
     mov ds,ax 
     call kelet1 
     call revah 
     call keletOpr 
     call revah 
     call kelet2 
     call dollar 
     int 21h 
     mov ax,4c00h 
     int 21h 
dollar: 
     mov cx,0 
     mov si,0 
     mov cl,num1[si+1] 
     add si,cx 
     add si,2 
     mov num1[si],'$' 
     mov cx,0 
     mov si,0 
     mov cl,num1[si+1] 
     add si,cx 
     add si,2 
     mov num2[si],'$' 
     ret 
revah: mov ah,2 
     mov dl,13 
     int 21h 
     mov dl,10 
     int 21h 
     ret 
kelet1: mov dx,offset entr_first 
     mov ah,9 
     int 21h 
     mov dx,offset num1 
     mov ah,10 
     int 21h 
     ret 
keletOpr:mov dx,offset select_op 
     mov ah,9 
     int 21h 
     mov ah,1 
     int 21h 
     mov opr[0],al 
     ret 
kelet2: mov dx,offset entr_sec 
     mov ah,9 
     int 21h 
     mov dx,offset num2 
     mov ah,10 
     int 21h 
     ret 
     code ends 
     end main 
+0

Auch SO ist voller Beispiele für die Umwandlung von String in Zahl ... Auch genauer gesagt, was verursacht Sie Problem, benötigen Sie einen Algorithmus oder stecken Sie fest, es zu implementieren? Wenn ja, wo genau? PS: Kommentiere deinen Code, besonders wenn du willst, dass andere dir helfen. Wenn dies eine Schulaufgabe ist, besuche dein Lernmaterial und konsultiere deinen Lehrer. – Jester

Antwort

0
mov dx,offset num1 
    mov ah,10 
    int 21h 

Das ist falsch, Service ah=0Ah von int 21h unterschiedliche Datenstruktur erfordert, siehe documentation.

Auch die Eingabe der zweiten Zeichenfolge ist natürlich falsch.

Und dann nach call kelet2 macht der Code keinen Sinn mehr.

(außer int 21h,ah=4Ch Exit Anruf).

Ich glaube nicht, dass Sie genug Assembly in 1 Tag lernen können, um eine Assembly-Prüfung von diesem Ausgangspunkt zu bestehen. Lassen Sie uns also hoffen, dass es in der Prüfung nicht um Assembly geht.

Ich denke, nach 2-3 Wochen intensiver (8-12h täglich) Studium + Programmierung können Sie auf "Anfänger" Ebene, die wahrscheinlich genug wäre, um zu bestehen.

Also, was Sie eigentlich fragen? Diese Seite ist weder "Code für mich" Service, noch "kostenlose Vorträge der Montage" (obwohl in begrenzt Sinn Ich tendiere dazu, genau das hier zu tun). Aber ich kann nicht ein halbes Jahr fehlender Bemühungen in einer Antwort liefern.

Vielleicht sollten Sie Ihre Prüfung in den Sommer verschieben, und dann jedes Wochenende 4-6h auf Ihrem Assembly Wissen arbeiten.

+0

Ich studiere Assembly seit einem Jahr und alles, was ich in meinem Code geschrieben habe, ist was wir gelernt haben und wurde aufgefordert, so zu schreiben –

+0

@ValerNaamaKuznetsov: Nun, was soll ich sagen ... 1) Ich sehe keinen Weg zu "repariere" dich für die Prüfung "morgen" 2) nach dem Jahr das => etwas ist falsch .. entweder dein Lektor, oder deine Bemühung, oder deine Art Dinge zu lernen oder irgendeine Kombination davon. 3) Wenn dein Kommentar "aber ich ** will **" lautet und du wirst mehrere Wochen lang hart arbeiten, dann versuche ich vielleicht, dir zu helfen, indem ich dir ein wenig lehre, aber es ist sehr zeitaufwendig bis zu und eigentlich wollen Sie wissen, in der Montage zu programmieren. Wenn ich meine Zeit mit meinem normalen Satz besteuern würde (ich nicht), würde ein solcher Kurs wie Ihre ganze edu Rechnung kosten. – Ped7g