を使用してそれは、charを取り、私はpollcount_putc(char)に呼ばれて、このアセンブリ関数を記述する必要がx86のアセンブリ
をCOM2 THREとpollcountをカウントし、COM2 THREの多くのテストは、ポーリングループ内で行われる方法をカウントし、 COM2に出力します。今私は0をすべて受け取っているので、間違ったことをしています。誰もが私のロジックの問題はそれは素晴らしいことだどこにどのような考えを持っている場合
#Function call is pollcount_putc(c[i])
#COM2 base address is 0x2f8
.text
.globl _pollcount_putc
COMTWO = 0x2f8
_pollcount_putc:
movl 4(%esp), %ecx #get character
movl $COMTWO, %edx #set port address
addl $5, %edx #get to LSR
movl $0, %ebx #set counter to 0
loop:
inb (%dx), %al #read in LSR byte
andb $0x01, %al #isolate DR bit
jz loop #if zero or not ready loop until
movw $COMTWO, %dx #Reset dx with correct com address
comaddress:
movb %cl, %al #move char input to output
outb %al, (%dx) #output the char taken in
addl $5, %edx #move back to LSR byte
countloop:
incl %ebx #increment count
inb (%dx), %al #read from LSR byte to get thre
andb $0x20, %al #mask to look at thre
jz countloop #if tx hr empty
end:
movl %ebx, %eax #set counter to eax return register
ret
.end
:ここ
は、以下のコードです。私はこのことをまったくやっているのかどうかはわかりません。
更新:私はこれがうまくいって、上のコードは新しいです。カップルの日に私はそれを閉じるために以下の答えを投稿します。
適切なアセンブリコードを書くの秘密の90%は、すべての*ステートメントに良いコメントを付けることです。そして、「取り戻す」ではなく、それが何をするかの論理的な記述。あなたは絶望的に失われた正確なポイントでコメントを終了します。コメントを書くことができない場合、必然的に正しいコードを書くことはできません。誰もあなたが思っていたものを見ることができないので、助けてください。 –
コメント付きの更新されたコードを投稿します。あなたが間違っていない間もあなたのコメントは役に立ちませんでした。 – Peter3