Ich habe diese Versammlung Funktion zu schreiben, die von pollcount_putc (char) genannt wirdZählen pollcount mit COM2 THRE mit x86 Assembly
Es ein Zeichen nimmt, zählt, wie viele Tests von COM2 THRE werden in der Abfrageschleife durchgeführt und dann gibt es an COM2 aus. Im Moment mache ich etwas falsches, da ich alle 0s empfange. Hier
ist der Code unter:
#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
Wenn jemand eine Idee hat, wo meine Logik Probleme, die sind groß sein würde. Ich bin mir nicht sicher, ob ich das überhaupt richtig mache.
Update: Ich habe das funktioniert und oben ist der neue Code. In ein paar Tagen werde ich die Antwort auch unten posten, um es zu schließen.
90% des Geheimnisses des Schreibens von anständigem Assemblercode ist, einen guten Kommentar zu * jeder * Aussage zu geben. Und nicht "zurückgesetzt", sondern eine logische Beschreibung dessen, was es tut. Du hörst auf, an genau dem Punkt zu kommentieren, an dem du hoffnungslos verloren gegangen bist. Wenn Sie keinen Kommentar schreiben können, dann können Sie unweigerlich keinen korrekten Code schreiben. Oder hol dir Hilfe, da niemand sehen kann, was du denkst. –
Ich werde den aktualisierten Code veröffentlichen, der funktioniert .... mit Kommentaren. Obwohl Sie nicht falsch lagen, war Ihr Kommentar auch nicht hilfreich. – Peter3