汇编语言课程设计屏幕上设计一个图形,用不同的颜色进行填充

如题所述

结构体定义
;char year[4] // 年
; 空格(1 Byte)
;int income (4 Bytes)// 收入
; 空格
;empoyer num (2 Bytes) // 雇员数
; 空格
;人均收入 (2 Bytes)
; 空格
; 要求:将data段的数据拷贝进table段数据,并结构化如上述格式,然后计算21年的人均收入
assume ds:data, es:table, cs:code, ss:stack
data segment
db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983'
db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992'
db '1993', '1994', '1995'
dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
dw 11542, 14430, 15257, 17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
display segment
db 21 dup ('year summ ne ?? ')
display ends

; 弄个栈,没什么用
; 就用来有时候腾出个寄存器来用
stack segment
dw 16 dup(0)
stack ends
code segment
start:
; 设置data段,以及ds:bx指向data段的第一个单元,即ds:[bx]的内容就是data段第一个单元的内容
mov ax, data
mov ds, ax
; 设置table段
mov ax, table
mov es, ax
; 设置堆栈段
mov ax, stack
mov ss, ax
mov sp, 16
; 初始化三个变址寄存器
mov bx, 0
mov si, 0
mov di, 0
; 准备复制,需要用到循环,21次
mov cx, 21
s_start:
; 年
mov ax, ds:[bx+0] ; 这里写个0是为了下面的对照,清晰点
mov es:[si+0], ax
mov ax, ds:[bx+2]
mov es:[si+2], ax
; 空格
mov al, 32
mov es:[si+4], al
; 收入
mov ax, ds:[bx+84]
mov es:[si+5], ax
mov ax, ds:[bx+86]
mov es:[si+7], ax
; 空格
mov al, 32
mov es:[si+9], al
; 雇员数,小心处理
mov ax, ds:[di+168]
mov es:[si+0ah], ax
; 空格
mov al, 32
mov es:[si+0ch], al
; 算人均收入,这里小心高低位
mov ax, ds:[bx+84]
mov dx, ds:[bx+86]
push cx ; 临时用一下cx,因为不可以 div ds:[bx+168]
mov cx, ds:[di+168]
div word ptr cx
pop cx
mov es:[si+0dh], ax
; 空格
mov al, 32
mov es:[si+0fh], al
add si, 16
add bx, 4
add di, 2 ; 这里记住要加上2
loop s_start
; 上面已经将数据排列好放在table段里,table 段在es:[0] 开始
; 下面就是要读这些数据,并计算好行列,显示在屏幕上
; 结构化的数据按字节排列如下:
; 0123 年(字符) 4 空格(字符) 5678 收入(数据) 9 空格 A B 雇员数(数据) C 空格 D E 人均收入(数据) F 空格
; 总共21年
; 其中收入、雇员数、人均收入是需要转字符格式的
mov ax, display
mov ds, ax
mov si, 0
mov di, 0
mov bx, 0
mov cx, 21
loop_display:
push cx
; #### 年
mov si, 0
mov ax, es:[di]
mov ds:[si], ax
mov ax, es:[di + 2]
mov ds:[si+2], ax
mov ax, 0
mov ds:[si+4], ax ; 原来的显示错误,mov ds:[si+5], ax , 错一个字节都不行。。。
; 显示年
mov dl, 20 ; 第20列
call dis
; #### 收入
mov ax, es:[di+5] ; 低16位
mov dx, es:[di+7] ; 高16位
mov si, 0
call dwtoc ; ds:si 指向字符串首地址
; 显示收入
mov dl, 28 ; 第28列
call dis
; #### 雇员数
mov ax, es:[di+0Ah]
mov si, 0
call dtoc
; 显示雇员数
mov dl, 36 ; 第36列
call dis
; ####人均收入
mov ax, es:[di+0Dh]
mov si, 0
call dtoc
; 显示人均收入
mov dl, 44 ; 第44列
call dis
add di, 16
pop cx
sub cx, 1
jcxz end_main
jmp near ptr loop_display
end_main:
mov ah, 01h
int 21h
mov ax, 4c00h
int 21h
; 子程序dis
; 功能:封装一些相同的操作
; 参数:(dl) 为列数
dis:
push ax
push bx
push cx
push dx
push di
push si
mov ax, di
mov dh, 16
div dh
mov dh, al
add dh, 2 ; dh = di/16+2
mov si, 0
mov cl, 2
call show_str
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
; 子程序:dtoc
; 功能:将word型数据转变成表示十进制的字符串,字符串以0结尾
; 参数:(ax) = word 型数据
; ds:si 指向字符串首地址
; 返回:无
dtoc:
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-01-26


画矩形框子程序:
fr struc
savebp dw ?
saveret dd ?
y2 dd ?
x2 dd ?
y1 dd ?
x1 dd ?
color dd ?
fr ends
extrn line:far
code segment
assume cs:code
public box
box proc far
push bp
mov bp,sp
push ax
push bx
push cx
push dx
push si
push di
push ds
push es
les bx,[bp].color
push es
push bx
les bx,[bp].x1
push es
push bx
les bx,[bp].y1
push es
push bx
les bx,[bp].x1
push es
push bx
les bx,[bp].y2
push es
push bx
call line
les bx,[bp].color
push es
push bx
les bx,[bp].x1
push es
push bx
les bx,[bp].y2
push es
push bx
les bx,[bp].x2
push es
push bx
les bx,[bp].y2
push es
push bx
call line
les bx,[bp].color
push es
push bx
les bx,[bp].x2
push es
push bx
les bx,[bp].y2
push es
push bx
les bx,[bp].x2
push es
push bx
les bx,[bp].y1
push es
push bx
call line
les bx,[bp].color
push es
push bx
les bx,[bp].x2
push es
push bx
les bx,[bp].y1
push es
push bx
les bx,[bp].x1
push es
push bx
les bx,[bp].y1
push es
push bx
call line
pop es
pop ds
pop di
pop si
pop dx
pop cx
pop bx
pop ax
pop bp
ret 20
box endp
code ends
end
填充子程序:
tose macro zzzzz
LOCAL L1,L2,L3,L4,L5,L6,NEXT
MOV AX,XX
MOV X0,AX
MOV AX,YY
MOV Y0,AX
MOV DI,Y0
MOV SI,X0
L1: MOV AH,13
MOV DX,DI
MOV CX,SI
INT 10H
CMP AL,OLD_COLOR
JNE L2
INC DI
JMP L1
L2: DEC DI
MOV Y1,DI
MOV DI,Y0
L3: MOV AH,13
MOV DX,DI
MOV CX,SI
INT 10H
CMP AL,OLD_COLOR
JNE L4
DEC DI
JMP L3
L4: INC DI
MOV Y2,DI
MOV DI,Y2
MOV COUNT,0
L5: MOV AH,12
MOV DX,DI
MOV CX,SI
MOV AL,NEW_COLOR
INT 10H
CMP COUNT,1
JE L6
      ZZZZZ CX
MOV AH,13
INT 10H
CMP AL,OLD_COLOR
JNE L6
INC COUNT
MOV Y_SAVE,DI
L6: INC DI
CMP DI,Y1
JLE L5
ZZZZZ SI
MOV AX,Y_SAVE
MOV Y0,AX
MOV DI,Y0
CMP COUNT,0
JE NEXT
JMP L1
NEXT: NOP
ENDM

FR STRUC
SAVEBP DW ?
SAVERET DD ?
Y_AD DD ?
X_AD DD ?
COLOR_AD DD ?
FR ENDS
DATA SEGMENT PUBLIC
XX DW ?
YY  DW ?
X0 DW ?
Y0 DW ?
OLD_COLOR DB ?
NEW_COLOR DB ?
Y1 DW ?
Y2 DW ?
Y_SAVE DW ?
COUNT DW ?
DATA ENDS
DGROUP GROUP DATA
CODE SEGMENT
ASSUME CS:CODE,DS:DGROUP
PUBLIC PAINTT
PAINTT PROC FAR
PUSH BP
MOV BP,SP
push ax
push bx
push cx
push dx
push si
push di
push ds
push es
LES BX,[BP].X_AD
MOV AX,ES:[BX]
MOV XX,AX
LES BX,[BP].Y_AD
; MOV AX,199
; SUB AX,ES:[BX]
mov ax,es:[bx]
MOV YY,AX
LES BX,[BP].COLOR_AD
MOV AL,ES:[BX]
MOV NEW_COLOR,AL
MOV AH,13
MOV DX,YY
MOV CX,XX
INT 10H
MOV OLD_COLOR,AL
TOSE INC
DEC XX
TOSE DEC
pop es
pop ds
pop di
pop si
pop dx
pop cx
pop bx
pop ax
POP BP
RET 12
PAINTT ENDP
CODE ENDS
END

本回答被网友采纳

汇编语言课程设计求解
msg0 int 21h mov bl, 10r0: mov bh, 0r1: ;read N mov ah,1 int 21h cmp al,0dh jz r2 cmp al,'0' jb e0 cmp al,'9' ja e0 and al, 0Fh xchg al, N mul bl add N, al inc bh cmp bh, 2 jz r2 jmp r1r2: mov al, N cmp a...

在线绘图流程图怎么做-画图工具怎么做流程图如何操作
3、左侧的流程图形是搭建流程图的关键,选择需要的流程图图形移动至右面编辑面板中进行编辑使用就可以。4、基本框架搭建完后,我们需要做的就是将内容进行添加,双击文本框即可,这时在画布右边出现的工具栏中将可以随文本的样式、排列及背景颜色根据自己的喜好进行设置。5、整个内容填充完后,整体上要是显得很...

一个编译原理的课程设计,急急急
2. 编译 3. 汇编 4. 查找库函数 5. 连接

200分求用汇编语言做“学生成绩管理”或“带显示界面的运算器”!!!
exit1: set_p2 show err1 exit2: set_p3 pop dx pop cx pop bx pop ax retmodify endpdelete proc near push ax push bx push cx push dx clear1 set_p1 4 mov dx,offset fname mov al,2 mov ah,3dh int 21h mov bx,ax mov handle,ax getin buffer1,15 ; contact is in buffer1read5...

汇编语言高手:微机原理课程设计---显示日期或时间
mov ah,1 ;设置光标属性 int 10h pop ax pop cx ret SetCursor_Attr EndP ; --- ; 入口:AL=cmos内存端口号,DI=对应的ASCII码保存地址 BCD_ASCII Proc Near ;将组合BCD码转换成对应的ASCII码 out 70h,al

汇编语言中的屏幕上卷与屏幕下卷有什么区别?分别是什么意思?
入口参数:AH=06H——向上滚屏,07H——向下滚屏 AL=滚动行数(0——清窗口)BH=空白区域的缺省属性 (CH、CL)=窗口的左上角位置(Y坐标,X坐标)(DH、DL)=窗口的右下角位置(Y坐标,X坐标)出口参数:无 我测试了一下,都是清窗口,没找到有啥差别。测试程序:CODE SEGMENT ASSUME CS:CODE...

汇编语言程序设计读者能学到什么
如指针的作用,以及数组等数据结构在计算机内部的表示方式。总的来说,学习这门汇编语言程序设计课程,不仅能够提升编程技能,还能够揭示计算机工作的内在逻辑,对提高对计算机科学的全面认识有着积极作用。这将是一个理论与实践相结合,深入理解计算机工作原理的过程。

基于80c51单片机的交通灯课程设计汇编语言编程
程序流程如下:开始:绿灯 东西方向南北方向的红灯 延迟30秒 东西方向绿灯“南北方向的红灯已关闭 东西方向的,黄色的光的 南北方向的,黄色的光 BR \/> 5秒延时的东西方向的黄色指示灯熄灭南北方向 黄色指示灯熄灭 的方向,南北方向20秒的延迟一个南北方向绿灯东西方向红灯 绿灯熄灭红灯熄灭东西方向 一些...

汇编语言是什么语言?
机器语言,是第一代计算机语言。 2. 汇编语言 为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计...

汇编的名词解释
8、该显示模组用80286巨集组合语言程式设计,能与FORTRAN语言介面实现其图形功能,可以方便地用来进行机构学或其它方面的图形显示。9、W32DASM可以反汇编16和32位的可执行档案格式。10、这是一个利用汇编语言进行编写的跑马灯程式。11、概念不代表最后渐近关于紧持对程式码,制造,功能,汇编或工程学。12、...

相似回答