簡體   English   中英

使用 8086 組件制作矩形星形

[英]making a rectangular star shape with 8086 assembly

我正在嘗試使用 1 個循環制作一個帶有 8086 組件的矩形星形,並使用 cmp 制作外部一個為 0 和 jne 代碼如下。

這是我的代碼:

.model small
.stack 100h
.data
ml db 'how many lines you want',13,10,'$'
ms db 'how many stars in each line',13,10,'$'
lines db 0
stars db 0

nl db 13,10,'$'
.code
Main Proc
mov ax, @data
mov ds, ax

mov dx, OFFSet ml
mov ah,9h
int 21h

mov ah,1h
int 21h

sub al,'0'

mov [line],al
int 21h

xor ah,ah

mov dx, OFFSet ms
mov ah,9h
int 21h

mov ah,1h
int 21h

sub al,'0'

mov [stars],al
int 21h

mov cx,[stars]
int 21h


outer:
dec [line]
mov cl,[stars]
int 21h
inner:
mov dl, '*'
mov ah, 2h
int 21h
loop inner

mov dx, OFFSet nl
mov ah,9h
int 21h

cmp [line],0
jne outer

 MOV AH,4CH
 INT 21H

Main ENDP
END Main

一個長方形的星形

確實,這種措辭令人困惑,但代碼顯然想要繪制一個由星號組成的矩形。

好消息是您的嵌套循環相當不錯。 但是,您編寫了許多多余的int 21h指令,這些指令沒有實際用途並且有害。 即將被刪除。

一個大問題是您正在使用非零值加載CH寄存器,因此,內部循環的第一次運行將繪制太多星號。

 stars db 0 nl db 13,10,'$'

mov cx,[stars]指令不僅在CL中加載號,還在CH中加載數字 13。

這是您的代碼的清理版本:

mov dx, OFFSet ml
mov ah, 09h
int 21h

mov ah, 01h
int 21h
sub al, '0'
mov [line], al

mov dx, OFFSet ms
mov ah, 09h
int 21h

mov ah, 01h
int 21h
sub al, '0'
mov [stars], al

outer:
  mov  cl, [stars]
  mov  ch, 0                  <<<<< Because LOOP uses CX
inner:
  mov  dl, '*'
  mov  ah, 02h
  int  21h
  loop inner
  mov  dx, OFFSet nl
  mov  ah, 09h
  int  21h

  dec  [line]
  jnz  outer

代替dec [line]cmp [line], 0 ,您可以根據dec指令已經定義的零標志有條件地跳轉( jnz outer )。


根本不使用LOOP也很容易(因為以后你將不得不取消學習它,真的)

outer:
  mov  cl, [stars]
inner:
  mov  dl, '*'
  mov  ah, 02h
  int  21h
  dec  cl                  <<<<<<
  jnz  inner               <<<<<<
  mov  dx, OFFSet nl
  mov  ah, 09h
  int  21h

  dec  [line]
  jnz  outer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM