Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
Loops 递增程序集中的CX计数器(TASM)_Loops_Assembly_Increment_Tasm - Fatal编程技术网

Loops 递增程序集中的CX计数器(TASM)

Loops 递增程序集中的CX计数器(TASM),loops,assembly,increment,tasm,Loops,Assembly,Increment,Tasm,我有这个汇编代码,我已经在过去几天的工作。这是我的家庭作业,它的条件是打印出从“a”到“J”的字符,但每个字母之间有一个星号 输出:A*B*C*…J* 我们应该添加的限制是,我们只能使用一个数据容器dl。另外,我们只能使用循环和跳转条件 我基本上已经完成了我的工作,但我一直很难弄清楚为什么我的计数器cx在我的代码中没有很好地递增。这是我的密码: .model .code org 100h s: mov ax, 3 ; int 10h ; just clearing the sc

我有这个汇编代码,我已经在过去几天的工作。这是我的家庭作业,它的条件是打印出从“a”到“J”的字符,但每个字母之间有一个星号 输出:A*B*C*…J*

我们应该添加的限制是,我们只能使用一个数据容器
dl
。另外,我们只能使用循环和跳转条件

我基本上已经完成了我的工作,但我一直很难弄清楚为什么我的计数器
cx
在我的代码中没有很好地递增。这是我的密码:

.model
.code
org 100h
s: mov ax, 3   ;
   int 10h     ; just clearing the screen
   mov ah, 2
   mov cx, 1   ; counter is just set to one for possible increment
   mov dl, 'A' ; A is added to data container
   int 21h     ; prints out A
x: mov dl, '*' ; first asterisk is then added to container, replacing A
   int 21h     ; asterisk is printed out A*
   mov dl, 'A' ; asterisk is replace by A in the counter
y: inc dl      ;
   loop y      ; loops at y then increments container dl, A + 1-> B
   int 21h     ; prints out container, A*B
   inc cx      ; where the problem lies. Should increment but not
   cmp dl, 'J' ; if the character in container is not above j, jumps to..
   jna x       ; ..where x is
   int 20h     ; ends but doesnt due to infinite looping, container not reaching 'J'
end s
如果增量有效,我认为每次进程跳转到x,然后传递到循环y时,如果
cx
已被递增,它将根据计数器在多次递增后保持的量,循环并递增容器。这将导致容器达到高于字母J的状态


这就是我的问题。提前谢谢你对我的帮助

正如使用调试器可以看到的那样,它的增量很好。问题是您有一个
循环
命令,它将递减
CX
,直到它为零。因此,递增将始终使
CX
为1

如果要保留该值,请按
CX
loop
之前堆叠,然后将其弹出。并获取一个调试器来自己调试代码


或者,既然您只想通过
CX
增加
DL
,为什么不直接说
adddl,CL
,而不使用循环?

正如您可以通过使用调试器看到的那样,它的增量很好。问题是您有一个
循环
命令,它将递减
CX
,直到它为零。因此,递增将始终使
CX
为1

如果要保留该值,请按
CX
loop
之前堆叠,然后将其弹出。并获取一个调试器来自己调试代码


或者,既然您只想通过
CX
增加
DL
,为什么不直接说
ADD DL,CL
,而不使用循环?

可能使用ADD而不是inc。ADD CX,1或w.e ADD指令是。我不知道任务描述,对
DL
的“限制”是什么意思?您也在对数据使用
cx
。无论如何,如果您要进行逐字符流输出,则必须通过
'*'
值销毁
dl
,然后将其还原为字母,因此您肯定必须使用其他数据。那么限制到底是什么呢?没有内存缓冲区?没有堆栈使用
dh
不能使用吗?为什么
cx
can?顺便问一下,您是否可以在不使用
int21h
的情况下直接写入VRAM那么它就很简单了:D(实际上不是,写ptr需要更多的寄存器:/)哦,很抱歉,我想我应该说的限制是我不能将dl的值存储到另一个容器中。应该通过添加“*”来销毁它,然后通过循环或跳转条件以我自己的方式还原它。“你不能存储
dl
”是唯一的限制吗?然后,您只需在
cl
中从
'A'
数到
'J'
。在字母输出之前,将
cl
复制到
dl
,然后用
'*'
覆盖
dl
。我想说的是,我不反对有人为限制的练习,但到目前为止,这个练习对我来说没有多大意义。可能使用add而不是inc。add cx,1或w.e add指令是。我不明白任务描述,对
dl
的“限制”是什么意思?您也在对数据使用
cx
。无论如何,如果您要进行逐字符流输出,则必须通过
'*'
值销毁
dl
,然后将其还原为字母,因此您肯定必须使用其他数据。那么限制到底是什么呢?没有内存缓冲区?没有堆栈使用
dh
不能使用吗?为什么
cx
can?顺便问一下,您是否可以在不使用
int21h
的情况下直接写入VRAM那么它就很简单了:D(实际上不是,写ptr需要更多的寄存器:/)哦,很抱歉,我想我应该说的限制是我不能将dl的值存储到另一个容器中。应该通过添加“*”来销毁它,然后通过循环或跳转条件以我自己的方式还原它。“你不能存储
dl
”是唯一的限制吗?然后,您只需在
cl
中从
'A'
数到
'J'
。在字母输出之前,将
cl
复制到
dl
,然后用
'*'
覆盖
dl
。我想说的是,我不反对有人为限制的锻炼,但到目前为止,这对我来说没有多大意义。谢谢D我将尝试改为实现“添加”。谢谢:D我将尝试实现“添加”。