2017-01-18 5 views
-1

私は基本的な電卓を作っています(私は明日試験を受けています)が、固まっています。 私は配列に最初のnum、アクション(+ OR - )、次に配列に行く第2の数字(1-4の数字でなければならない)を得ています。 どのように私は配列からすべての数字を取得し、完全な数に変換(バイナリに変換)、数学的なアクションを行い、16進数に変換し、それを印刷するのですか? これは、分離された関数で行い、最初のnumを入力するメッセージが表示されたときにユーザーが0を入力したときにのみ、プログラムが終了します。 これは私のコードです。あなたが私の質問とコードを理解してくれることを願っています(私がインターネット上で探しているものに似たものを見つけることができませんでした)。 感謝:)関数と配列を使ったアセンブリ計算(サブ&追加)

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

でも、文字列を数値に変換するサンプルがいっぱいです...さらに具体的には何が問題になっているのですか?アルゴリズムが必要ですか、実装していませんか?もしそうなら、正確にどこですか? PS:あなたのコードをコメントしてください。これが学校の課題であれば、学習教材を再訪して先生に相談してください。 – Jester

答えて

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

これは間違っている、int 21hのサービスah=0Ahdocumentationを参照して、異なるデータ構造を必要とします。

また、2番目の文字列の入力も間違っています。

call kelet2の後にコードが意味をなさない。

int 21h,ah=4Ch出口コールを除く)。

この出発点からAssembly試験に合格するには、1日で十分なAssemblyを学ぶことはできません。ですから、試験はアセンブリに関するものではないと願っています。

集中して(毎日8-12時間)勉強+プログラミングの2-3週間後、あなたはおそらく十分に通過する "初心者"のレベルになると思う。

あなたは実際に何を求めていますか?このサイトは、「私のためのコード」サービスでもなく、「アセンブリの無料講義」でもありません(制限付きの感覚ですが、私はそれをここで正確に行う傾向があります)。しかし、1つの答えで半年間の努力を払うことはできません。

あなたの試験を夏に移動し、毎週末4-6時間、あなたのアセンブリの知識に取り組むべきでしょうか。

+0

私は1年前にアセンブリを勉強しています。私がコードに書いたことはすべて、私たちが学んだことであり、書くようになっています。 –

+0

@ValerNaamaKuznetsov:まあ、どういうわけか... 1) "明日の試験"のためにあなたを "修正"してください。2)年月が経ちました=>何かが間違っています。あなたの講師、あなたの努力、またはあなたの学習方法またはこれらの組み合わせ。 3)あなたのコメントが「だが私が欲しい」と答えた場合は、数週間は頑張りますが、少し教えてもらえますが、時間がかかります。あなたは実際にアセンブリでプログラムすることを知りたいと思っています。私が通常の料金で自分の時間に税金を払うなら(そうではありませんが)、そのようなコースはあなたのedu法案全体のようになります。 – Ped7g

関連する問題