FC2ブログ

徒然なる走り書き

トップページ作りました。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |

課題が終わらNEEEE

お久しぶりです、課題ばっかの毎日なのですよ。
てか、プログラミングの課題が終わらない。
正数、負数同士の計算は出来るけど、負数+正数の計算が出来ない。

誰か、手伝って…。
きっと、db氏も手伝ってくれるはずd(ry
INCLUDE Irvine32.inc ;Irvine's library to simplify programs
.data
var1 byte 70 DUP(30h),0
var2 byte 70 DUP(30h),0
sum byte 71 DUP(0),0

prompt1 byte "Enter your first value ", 0, 0dh, 0ah
prompt2 byte "Enter your second value ", 0, 0dh, 0ah

loc1 dword ?
loc2 dword ?

plus byte '+',0
space byte 20h
lines byte 73 DUP(2dh),0
carry byte 70 DUP(30h)
count dword ?

.code
main PROC
mov bh, 0
call EnterFirstVal
call EnterSecondVal

mov edi, offset var1
mov al, '-'
mov ecx, lengthof var1 - 1
cld
repne scasb
jz L1
jmp Lelse
L1:
mov edi, offset var2
mov al, '-'
mov ecx, lengthof var2 - 1
cld
repne scasb
jz L2
jmp L3
L2:
call Adding1
jmp next
L3:
call Adding2
jmp next
Lelse:
mov edi, offset var2
mov al, '-'
mov ecx, lengthof var2 - 1
cld
repne scasb
jz L4
jmp L5
L4:
call Adding3
jmp next
L5:
call Adding4
next:
call displayVal1
call displayVal2
call displayAnsw
exit
main ENDP

EnterFirstVal PROC
mov edx, offset prompt1
call WriteString

mov edx, offset carry
mov ecx, sizeof carry
call ReadString
mov ecx, eax
mov esi, 0
L1:
mov edi, 70
mov al, carry[esi]
mov carry[esi], 30h
sub edi, ecx
mov var1[edi], al
inc esi
loop L1

ret
EnterFirstVal ENDP

EnterSecondVal PROC
mov edx, offset prompt2
call WriteString

mov edx, offset carry
mov ecx, sizeof carry
call ReadString
mov ecx, eax
mov esi, 0
L2:
mov edi, 70
mov al, carry[esi]
mov carry[esi], 30h
sub edi, ecx
mov var2[edi], al
inc esi
loop L2
ret
EnterSecondVal ENDP

Adding1 PROC
mov ecx, 70
mov al, '-'
mov esi, 0
L1:
cmp al, var1[esi]
jz next
inc esi
loop L1
next:
mov loc1, esi
mov al, 30h
mov var1[esi], al

mov ecx, 70
mov al, '-'
mov esi, 0
L2:
cmp al, var2[esi]
jz next2
inc esi
loop L2
next2:
mov loc2, esi
mov al, 30h
mov var2[esi], al

mov ecx, 70
mov esi, 69
mov edi, 70
addition:
mov ah, 0
mov al, var1[esi]
add al, bh
aaa
mov bh, ah
or bh, 30h
add al, var2[esi]
aaa
or bh, ah
or bh, 30h
or al, 30h
mov sum[edi],al
dec esi
dec edi
loop addition
mov sum[edi], bh

mov ecx, 71
mov al, 30h
mov esi, 0
L3:
cmp al, sum[esi]
jnz next3
inc esi
loop L3
next3:
dec esi
mov al, '-'
mov sum[esi], al
mov esi, loc1
mov var1[esi], al
mov esi, loc2
mov var2[esi], al
ret
Adding1 ENDP

Adding2 PROC
mov ecx, 70
mov al, '-'
mov esi, 0
L1:
cmp al, var1[esi]
jz next
inc esi
loop L1
next:
;mov loc1, esi
;mov al, 30h
;mov var1[esi], al
;ret
Adding2 ENDP

Adding3 PROC
ret
Adding3 ENDP

Adding4 PROC
mov ecx, 70
mov esi, 69
mov edi, 70
addition:
mov ah, 0
mov al, var1[esi]
add al, bh
aaa
mov bh, ah
or bh, 30h
add al, var2[esi]
aaa
or bh, ah
or bh, 30h
or al, 30h
mov sum[edi],al
dec esi
dec edi
loop addition
mov sum[edi], bh
ret
Adding4 ENDP

displayVal1 PROC
call clrscr
mov al, space
call WriteChar
mov esi, 0
reform1:
mov var1[esi], al
inc esi
mov bl, var1[esi]
cmp esi, 68d
ja next1
cmp bl, 30h
je reform1
next1:
mov edx, offset var1
call WriteString
call crlf
ret
displayVal1 ENDP

displayVal2 PROC
mov edx, offset plus
call WriteString
mov esi, 0
reform2:
mov var2[esi], al
inc esi
mov bl, var2[esi]
cmp esi, 68d
ja next2
cmp bl, 30h
je reform2
next2:
mov edx, offset var2
call WriteString
call crlf
ret
displayVal2 ENDP

displayAnsw PROC
mov edx, offset lines
call WriteString
call crlf
mov esi, 0
reform3:
mov sum[esi], al
inc esi
mov bl, sum[esi]
cmp esi, 68d
ja next3
cmp bl, 30h
je reform3
next3:
mov edx, offset sum
call WriteString
call crlf
ret
displayAnsw ENDP

END main
スポンサーサイト
雑記 | コメント:3 | トラックバック:0 |
<<後日談3 | HOME | 後日談2>>

この記事のコメント

全く読めないwwwwwwwww
2006-12-02 Sat 00:46 | URL | db #44amet6U[ 編集]
頑張って解読だ(滅
見聞を広めるチャンスだぞ(最低

いやね、ASCIIで入力された数字の計算をするプログラムを書いているんですよ。
で、両方の数字が負数同士、正数同士だとやりやすいんだが、片方だけが負数だけだったりするとなんかバグる。

ちなみにもしvar1に入力された数字が負数だったら、Var2-Var1の形で計算しようと思っているのですよ。
んで、正数に直したVar1がVar1>Var2だったら正常な答えが出るんだが、Var2>Var1だとバグる。

困る。
泣きそう。
2006-12-02 Sat 02:56 | URL | KaNi #NohCqvcE[ 編集]
ジャネーノ?
例えば分岐ミスとかー
例えば進みすぎてフラグ潰してるとかー
メモリレベルで考えるとフラグぶっ潰してそうな気はするけど

全然読んでないけどね!
2006-12-02 Sat 04:59 | URL | db #44amet6U[ 編集]

コメントの投稿















コメント非公開の場合はチェック

この記事のトラックバック

| HOME |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。