2016-11-21 38 views
1

我正在使用emu8086彙編程序,我是彙編語言新手。我想用黑色背景以黃色打印所有A-Z字母。我的循環不工作。它繼續運行,只有B字母顯示。
有人可以幫我嗎?這裏是我的代碼:循環不起作用來打印字母

include emu8086.inc 
ORG 100h 
MOV AX,0B800h 
MOV DS,AX 
MOV CX,26 
ALPHABETS: 
MOV CL,41h 
ADD CX,1 
MOV CH,00001110b 
MOV BX,0x0000 
MOV [BX],CX 
loop ALPHABETS 
RET 
+0

試着在你的頭上走通這:您可以設置cl到41h,你加1,你寫它,然後你回到字母表,你在哪裏.... –

+0

@DavidWohlferd 'include emu8086.inc ORG 100h' 'MOV AX,0B800H' 'MOV DS,AX' 'MOV CX,25' 'MOV AH,2' 'MOV DL,65' '阿爾法:'' INT 21h' 'INC DL' 'MOV DH,00001110b' '; ADD DH,1' 'MOV BX,0x0000' 'MOV [BX],DX' '環alpha' 'RET' 現在其打印但** A **最後變成** Z **,黃色僅適用於** Z **,這是起始中的** A **。我錯了,請告訴我 – haider

+0

在DOS下,有2種顯示方式:1)在0B800h或2)直接寫入視頻存儲器)使用DOS(或BIOS)中斷,如「int 21h」。你的新代碼正試圖做到這一點,這使得它很難閱讀。我不認爲'int 21h'有任何方式輸出屬性(顏色)。如果這很重要,則需要將字符及其屬性寫入內存(方法1),或使用AH = 09h的['int 10h'](https://en.wikipedia.org/wiki/INT_10H) 。 –

回答

2

你的程序有2個問題:

  • 您使用CX寄存器兩個循環計數器和要顯示的字符。
  • 您忘記更新BX寄存器中的地址,因此所有內容都顯示在彼此的頂部。
使用 CX作爲循環計

解決方案一:

include emu8086.inc 
ORG 100h 
    MOV  AX, 0B800h 
    MOV  DS, AX 
    mov  al, "A"  ;First character 
    mov  ah, 00001110b ;YellowOnBlack 
    mov  bx, 0   ;Address in video RAM 
    mov  cx, 26 
ALPHABETS: 
    mov  [bx], ax 
    inc  al   ;Next character 
    add  bx, 2   ;Next address 
    loop ALPHABETS 
    RET 

二的解決方案使用的字符代碼本身作爲一個循環計數器:

include emu8086.inc 
ORG 100h 
    MOV  AX, 0B800h 
    MOV  DS, AX 
    mov  al, "A"  ;First character 
    mov  ah, 00001110b ;YellowOnBlack 
    mov  bx, 0   ;Address in video RAM 
ALPHABETS: 
    mov  [bx], ax 
    inc  al   ;Next character 
    add  bx, 2   ;Next address 
    cmp  al, "Z" 
    jbe  ALPHABETS 
    RET