【问题标题】:how to print horizontally,vertically and diagonally in assembly language如何用汇编语言水平、垂直和对角线打印
【发布时间】:2018-09-30 15:07:45
【问题描述】:

我的代码是这样的

debug
a
mov cx,000a
mov ah,02
mov dl,30
int 21
inc dl
loop 0107
mov dl,0a
int 21
mov dl,0d
int 21
mov cx,0009
mov dl,20
int 21
mov dl,31
int 21
push dx
mov dl,0a
int 21
pop dx
inc dl
loop 011e
push dx
mov dl,0a
int 21
mov dl,0d
int 21
pop dx
mov cx,0009
mov dl,31
int 21
push dx
mov dl,0a
int 21
mov dl,0d
int 21
pop dx
inc dl
loop 0139
int 20

实际输出

想要的输出:

【问题讨论】:

  • 注意第一行之后,每行有2个字符,用0个或多个空格分隔。除非您使用光标移动系统调用,否则您应该将两个字符打印为同一循环的一部分。 (你的代码是一个不可读的未注释的混乱。DOS debug.exe 甚至不支持标签,所以这很可怕。使用更好的汇编程序,这样你就可以给你的分支目标起有意义的名字。)

标签: assembly dos x86-16


【解决方案1】:

我认为这应该是你程序的诀窍:

...
165B:011E CD21          INT 21
165B:0120 52            PUSH    DX
165B:0121 B20A          MOV DL,0A
165B:0123 CD21          INT 21
165B:0125 5A            POP DX
165B:0126 FEC2          INC DL
165B:0128 E2F4          LOOP    011E
...

之后光标位于最后一行,您必须将其向上移动。可以通过 BIOS 中断 10 的 02 和 03 函数来实现

改变

165B:012A 52            PUSH DX
165B:012B B20A          MOV DL,0A
165B:012D CD21          INT 21
165B:012F B20D          MOV DL,0D
165B:0131 CD21          INT 21
165B:0133 5A            POP DX

mov ah, 03
mov bh, 00
int 10
mov ah, 02
mov dl, 00
sub dh, 9
int 10

你必须调整它后面的跳跃。改变

loop 0139

loop 013E

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2012-11-19
    相关资源
    最近更新 更多