如何用汇编语言在屏幕上显示一个菱形

 我来答
957591782
2012-01-18 · TA获得超过2192个赞
知道小有建树答主
回答量:1165
采纳率:55%
帮助的人:599万
展开全部
我做的是中间空心的菱形程序

;这是自动生成的代码模板
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
做而论道
高能答主

2012-01-12 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.2万
采纳率:86%
帮助的人:8821万
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式