【发布时间】:2015-11-17 09:30:12
【问题描述】:
我目前有这个代码:
.model small
.stack 100h
.data
.code
CLRSCR:
mov ax,0003h
int 10h
ROWCOLINIT:
mov dh,0
mov dl,0
MYLOOP:
mov ax,dx
mov ah,0
mov bl,2
div bl
cmp ah,0
je EVENCOL
ODDCOL:
mov al,2
CURSORINIT:
mov ah,02h
mov bh,0
int 10h
ATTRIBINIT:
mov ah,09h
mov bl,30h
PRINTCHAR:
mov cx,1
int 10h
inc dl
cmp dl,5
je RESETCOLINCROW2
DONTRESETCOL:
cmp dh,5
je EXIT
jmp MYLOOP
LOOP2:
mov ax,dx
mov ah,0
mov bl,2
div bl
cmp ah,0
je EVENCOL2
ODDCOL2:
mov al,42
CURSORINIT2:
mov ah,02h
mov bh,0
int 10h
ATTRIBINIT2:
mov ah,09h
mov bl,30h
PRINTCHAR2:
mov cx,1
int 10h
inc dl
cmp dl,5
je RESETCOLINCROW
DONTRESETCOL2:
cmp dh,5
je EXIT
jmp LOOP2
EXIT:
mov ah,4ch
int 21h
RESETCOLINCROW:
mov dl,0
inc dh
jmp DONTRESETCOL
RESETCOLINCROW2:
mov dl,0
inc dh
jmp DONTRESETCOL2
EVENCOL:
mov al,42
jmp CURSORINIT
EVENCOL2:
mov al,2
jmp CURSORINIT2
end
我的程序输出是:
*☻*☻*
☻*☻*☻
*☻*☻*
☻*☻*☻
*☻*☻*
我正在尝试使用 2 个循环来简化此代码。如何在汇编程序中进行嵌套循环?
【问题讨论】:
-
规范是否允许您更改为另一种语言? :)
-
也许你应该评论你的代码并告诉我们这个程序应该做什么?
-
虽然你说要简化为两个循环,但也可以用一个循环产生想要的效果(单循环也更简单)
-
其实可以是一个循环。如果您不将输出包装成几行,那么它是一个微笑星-微笑-星-...字符流。编写一个循环,在每个奇数迭代中打印一个星形,在每个偶数迭代中打印一个微笑(使用“test total_char_count, 1”来确定当前迭代是奇数还是偶数)。然后,如果已打印的字符模块 5 的总数为零,则将“if”(cmp/check)放入打印换行符的循环中。以某种方式检测打印字符数何时等于(列 X 行)并退出循环。
-
你根本不需要循环。您可以通过单个 BIOS 调用显示该输出。
标签: assembly nested-loops dos masm x86-16