Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 用8086组件制作矩形星形_Assembly_X86 16 - Fatal编程技术网

Assembly 用8086组件制作矩形星形

Assembly 用8086组件制作矩形星形,assembly,x86-16,Assembly,X86 16,我正在尝试用8086组件制作一个矩形星形,使用1个循环,并使用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 m

我正在尝试用8086组件制作一个矩形星形,使用1个循环,并使用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
一个圆形的星形

的确,这一措辞令人困惑,但代码显然希望绘制一个由星号组成的矩形

好消息是嵌套循环相当不错。但是,您编写了大量冗余的
int21h
指令,这些指令没有实际用途,而且有害!被移除

一个大问题是,您正在加载带有非零值的
CH
寄存器,因此,内部循环的第一次运行将绘制太多星星

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

请正确格式化您的代码,因为这很难阅读。您所说的“矩形星形”是什么意思?@Calculuswhiz我猜OP只是指由星号字符组成的矩形,但是是的,措辞有点混乱。我猜,因为您发布了这个问题,所以您的代码没有按照您预期的方式工作。但是你没有告诉我们你的预期产出是什么,或者你的实际产出是什么。现在这里真的没有什么可以回答的,因为你实际上没有提出任何问题或描述任何问题。
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
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