循環無法打印字母 (Loop does not work to print alphabets)


問題描述

循環無法打印字母 (Loop does not work to print alphabets)

我正在使用 emu8086 彙編程序,我是彙編語言的新手。我想以黑色背景的黃色打印所有 AZ 字母。我的循環不工作。它一直在運行,只顯示 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

參考解法

方法 1:

Your program has 2 problems:

  • You use the CX register for both the loop counter and the character that you want to display.
  • You forget to update the address in the BX register and so everything gets displayed on top of each other.

First solution using CX as a loop counter:

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

Second solution using the character code itself as a loop counter:

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

(by user7056520Sep Roland)

參考文件

  1. Loop does not work to print alphabets (CC BY‑SA 2.5/3.0/4.0)

#emu8086 #assembly






相關問題

使用 include 'emu8086.inc' 反轉字符串的大小寫和順序 (Reverse case and order of a String using include 'emu8086.inc')

emu8086 : ARR 不包含任何值 (emu8086 : ARR do not contain any value)

為什麼這個彙編代碼不刪除擴展名為“.lnk”的文件? (Why doesn't this assembly code delete the file with ".lnk" extension?)

將 C 代碼轉換為 8086 程序集 (Converting C code into 8086 assembly)

循環無法打印字母 (Loop does not work to print alphabets)

如何使用 call 和 ret 更改堆棧內容? (how to change stack content with call and ret?)

彙編語言中的putch函數通過堆棧 (putch function in assembly language through stack)

如何在不使用 HLT 的情況下對程序進行 HLT (How to HLT the program without using HLT)

使用 8086 彙編計算 10 的階乘 (Computing the factorial of 10 using 8086 assembly)

你好,我有一個問題,我需要從用戶那裡得到輸入,輸入是一個數字和一個數字後的數字,數字可以是雙字 (hello , i got a question that i need to get input from user, the input is a number and digit after digit ,the number can be a doubleWord)

在彙編語言中得到錯誤的結果 (Getting wrong result in Assembly language)

我的氣泡代碼是彙編語言嗎? (is my code for bubble right at assembly language?)







留言討論