答案:我做的是中间空心的菱形程序
;这是自动生成的代码模板
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
DATAS SEGMENT ;数据段
;请在这里定义您的数据
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV AX,3 ;控制菱形的大小 .最小三行,
MOV SI,0
;空心菱形程序
;空格的大小我们暂时放在si中
;我采用2个循环一个循环是上部分一个循环是下部分
;循环之前需要准备一个寄存器作为空格的数量,我们就用bx寄存器.dl寄存器用来作*用它组成菱形
;di中保存*的输出个数
;空格的数量是通过中间的大小来确定的
CMP AX,3
JAE OK ;若大于等于3则可以组成菱形否则结束
JMP NEAR PTR OVER
OK: MOV CX,AX ;循环次数通过这个确定
MOV BX,CX
DEC BX ;空格数确定下来
MOV DI,1 ;*号输出个数确定下来
PUSH CX
SHANG: PUSH CX
MOV CX,BX ;空格输出个数在bx中传送给cx循环使用
JCXZ TIAOCHU
DEC BX ;空格个数-1
HUAKONGGE: MOV DL,' ' ;内不循环用来画画
MOV AH,02H
INT 21H
LOOP HUAKONGGE
TIAOCHU: CMP SI,0
JZ YIGE ;若是输出一个星的情况下就输出一个*执行下一次循环
MOV AH,02H
MOV DL,'*'
INT 21H
;空格个数就是用Si
MOV CX,SI
;输出空格
KONGGE2: MOV DL,' '
MOV AH,02H
INT 21H
LOOP KONGGE2
YIGE: MOV AH,02H
MOV DL,'*'
INT 21H
;在这里需要一个回车换行
MOV DL,0DH ;回车
MOV AH,02H
INT 21H
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
CMP SI,0
JZ LINGWAI ;若为0则将其+1否则+2
INC SI
LINGWAI: INC SI
POP CX
LOOP SHANG ;上半部分及中间组成循环
;下半部分菱形
POP CX
DEC CX
MOV BX,1
SUB SI,4
SHANG2: PUSH CX
MOV CX,BX ;空格输出个数在bx中传送给cx循环使用
INC BX ;空格个数+1
HUAKONGGE2: MOV DL,' ' ;内不循环用来画画
MOV AH,02H
INT 21H
LOOP HUAKONGGE2
TIAOCHU2: CMP SI,0
JZ YIGE2 ;若是输出一个星的情况下就输出一个*执行下一次循环
MOV AH,02H
MOV DL,'*'
INT 21H
;空格个数就是用Si
MOV CX,SI
;输出空格
KONGGE22: MOV DL,' '
MOV AH,02H
INT 21H
LOOP KONGGE22
YIGE2: MOV AH,02H
MOV DL,'*'
INT 21H
;在这里需要一个回车换行
MOV DL,0DH ;回车
MOV AH,02H
INT 21H
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
CMP SI,1
JZ LINGWAI2 ;若为0则将其+1否则+2
DEC SI
LINGWAI2: DEC SI
POP CX
DEC CX
CMP CX,0
JNZ SHANG2 ;上半部分及中间组成循环
MOV AH,07H ;暂停程序
INT 21H
OVER: MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
其他:;这个汇编程序运行的结果肯定是你想要的,但过程可能是你不想用的。 name 这样使用,是可以试试写IF的时候注意层次,一个IF完成的时候就应该有个end 参考: http://hi.zhaoxi.net/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/c6c066cb22135d8cc81768ac.html http://hi.zhaoxi.net/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d744f03acb7533e014cecbc9.html