8086汇编如何最小改动将星号三角改为逐行递增数字三角
实现方案
不需要全量重写现有代码,仅需调整3处极小逻辑即可实现需求,原有代码的多层循环结构、行数计数、空格打印、换行处理逻辑全部可以保留,总改动代码不超过4行。
具体改动说明
- 将原代码中空格打印完成后跳转的
L2标签调整为跳转至新增的初始化节点,在该节点新增1条指令,把每行要打印的起始字符初始化为'0' - 删除原星号打印逻辑中固定给DL寄存器赋值
'*'的指令 - 在每次调用中断输出单个字符后,新增1条
INC DL指令,让待输出的字符ASCII码自增,实现连续数字输出
修改后可直接运行的完整代码
.MODEL SMALL .STACK 100H .DATA STAR DB ? BLANK DB ? .CODE MAIN PROC MOV AX,@DATA MOV DS,AX MOV CX,10 MOV BH,10 MOV BL,0 MOV STAR,BH MOV BLANK,BL L1: CMP BLANK,0 JE L2_INIT MOV AH,2 MOV DL,32 INT 21H DEC BLANK JMP L1 L2_INIT: MOV DL,'0' L2: MOV AH,2 INT 21H INC DL DEC STAR CMP STAR,0 JNE L2 MOV AH,2 MOV DL,0AH INT 21H MOV DL,0DH INT 21H DEC BH MOV STAR,BH INC BL MOV BLANK,BL LOOP L1 EXIT: MOV AH,4CH INT 21H MAIN ENDP END MAIN
效果说明
代码运行后会保持原有星号三角形的排版逻辑:第一行无缩进输出0123456789,第二行缩进1个空格输出012345678,逐行递减长度,直到最后一行缩进9个空格输出0,和需求完全匹配。因为0-9的ASCII码是连续递增的,直接对存字符的DL寄存器做自增就可以得到正确的下一个数字字符,不需要额外做数值转ASCII的处理。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

