课设二--显示字符到屏幕
来源:互联网 发布:社交网络系统 编辑:程序博客网 时间:2024/05/21 07:51
题目:
将datas段内定义的数据,在屏幕上依次按行、列显示出来,要求字符串的显示,要做成子函数
汇编代码:
assume cs:code
datas segment
;考号,共占用64字节
db '42110001', '42110002', '42110003', '42110004'
db '42110005', '42110006', '42110007', '42110008'
;姓名,共占24字节
db 'qgh','eay','lfd','irc','cxg','wkf','dux','nfo'
;性别,共占8字节
db 'f','f','m','f','m','m','m','f'
;考试分数,共占24字节
db '267','621','467','604','344','640','306','239'
datas ends
;考号,共占用64字节
db '42110001', '42110002', '42110003', '42110004'
db '42110005', '42110006', '42110007', '42110008'
;姓名,共占24字节
db 'qgh','eay','lfd','irc','cxg','wkf','dux','nfo'
;性别,共占8字节
db 'f','f','m','f','m','m','m','f'
;考试分数,共占24字节
db '267','621','467','604','344','640','306','239'
datas ends
stack segment
db 32 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,32
mov ax,datas
mov ds,ax
mov ax,0b800h
mov es,ax
start:mov ax,stack
mov ss,ax
mov sp,32
mov ax,datas
mov ds,ax
mov ax,0b800h
mov es,ax
mov dh,8
mov dl,4 ;行列
mov bx,0
mov cx,8
mov dl,4 ;行列
mov bx,0
mov cx,8
s:
mov si,0
mov di,0
call show1
add bx,8
inc dh
loop s
;以上完成第一列显示功能
mov si,0
mov di,0
call show1
add bx,8
inc dh
loop s
;以上完成第一列显示功能
mov dh,8
mov dl,8 ;改变输出的显存地址
mov bx,64
mov cx,8
mov dl,8 ;改变输出的显存地址
mov bx,64
mov cx,8
s1:
mov si,0
mov di,0
call show2
add bx,3
inc dh
loop s1
;以上完成第二列显示功能
mov si,0
mov di,0
call show2
add bx,3
inc dh
loop s1
;以上完成第二列显示功能
mov dh,8
mov dl,16 ;改变输出的显存地址
mov bx,88
mov cx,8
mov dl,16 ;改变输出的显存地址
mov bx,88
mov cx,8
s2:
mov si,0
mov di,0
call show3
add bx,1
inc dh
loop s2
;以上完成第三列显示功能
mov si,0
mov di,0
call show3
add bx,1
inc dh
loop s2
;以上完成第三列显示功能
mov dh,8
mov dl,24 ;改变输出的显存地址
mov bx,96
mov cx,8
s3:
mov si,0
mov di,0
call show2
add bx,3
inc dh
loop s3
;以上完成第四列显示功能
mov si,0
mov di,0
call show2
add bx,3
inc dh
loop s3
;以上完成第四列显示功能
mov ax,4c00h
int 21h
show1:push cx
push si
mov cx,8
ss0:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx ;行列位置的数据压栈
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx ;行列位置数据不变的出栈
pop ax
mov es:[bx+di],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss0
pop si
pop cx
ret
;该子函数显示8个字节的数据
push si
mov cx,8
ss0:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx ;行列位置的数据压栈
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx ;行列位置数据不变的出栈
pop ax
mov es:[bx+di],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss0
pop si
pop cx
ret
;该子函数显示8个字节的数据
show2:push cx
push si
mov cx,3
ss1:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx
pop ax
mov es:[bx+di+12],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss1
pop si
pop cx
ret
;该子函数显示3个字节的数据
push si
mov cx,3
ss1:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx
pop ax
mov es:[bx+di+12],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss1
pop si
pop cx
ret
;该子函数显示3个字节的数据
show3:push cx
push si
mov cx,1
ss2:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx
pop ax
mov es:[bx+di+12],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss2
pop si
pop cx
ret
;该子函数显示1个字节的数据
push si
mov cx,1
ss2:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx
pop ax
mov es:[bx+di+12],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss2
pop si
pop cx
ret
;该子函数显示1个字节的数据
cal:mov al,2
sub dl,1
mul dl ;计算列
mov bx,ax
mov al,160
sub dh,1
mul dh ;计算行
add bx,ax ;相加,得到地址
ret
;该子函数计算输出的显存地址
code ends
sub dl,1
mul dl ;计算列
mov bx,ax
mov al,160
sub dh,1
mul dh ;计算行
add bx,ax ;相加,得到地址
ret
;该子函数计算输出的显存地址
code ends
end start
补充:此答案是未经修改的,由于还有许多知识没学,目前暂不修改,因为可作为复习资料,所以不去解释过程。
**代码的相似度超过90%,是一定能够归为一个方法的,我的脑海里突然想起啦这样的话,于是,我对自己的代码进行啦修改。
assume cs:code
datas segment
;考号,共占用64字节
db '42110001', '42110002', '42110003', '42110004'
db '42110005', '42110006', '42110007', '42110008'
;姓名,共占24字节
db 'qgh','eay','lfd','irc','cxg','wkf','dux','nfo'
;性别,共占8字节
db 'f','f','m','f','m','m','m','f'
;考试分数,共占24字节
db '267','621','467','604','344','640','306','239'
datas ends
;考号,共占用64字节
db '42110001', '42110002', '42110003', '42110004'
db '42110005', '42110006', '42110007', '42110008'
;姓名,共占24字节
db 'qgh','eay','lfd','irc','cxg','wkf','dux','nfo'
;性别,共占8字节
db 'f','f','m','f','m','m','m','f'
;考试分数,共占24字节
db '267','621','467','604','344','640','306','239'
datas ends
stack segment
db 32 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,32
mov ax,datas
mov ds,ax
mov ax,0b800h
mov es,ax
start:mov ax,stack
mov ss,ax
mov sp,32
mov ax,datas
mov ds,ax
mov ax,0b800h
mov es,ax
mov dh,8
mov dl,4 ;行列
mov bx,0
mov cx,8
mov dl,4 ;行列
mov bx,0
mov cx,8
s:
mov si,0
mov di,0
mov ax,8 ;ax为传入子函数的参数,表示打印出的字符串有几个字符
call show
add bx,8
inc dh
loop s
;以上完成第一列显示功能
mov si,0
mov di,0
mov ax,8 ;ax为传入子函数的参数,表示打印出的字符串有几个字符
call show
add bx,8
inc dh
loop s
;以上完成第一列显示功能
mov dh,8
mov dl,15 ;改变输出的显存地址
mov bx,64
mov cx,8
mov dl,15 ;改变输出的显存地址
mov bx,64
mov cx,8
s1:
mov si,0
mov di,0
mov ax,3
call show
add bx,3
inc dh
loop s1
;以上完成第二列显示功能
mov si,0
mov di,0
mov ax,3
call show
add bx,3
inc dh
loop s1
;以上完成第二列显示功能
mov dh,8
mov dl,21 ;改变输出的显存地址
mov bx,88
mov cx,8
mov dl,21 ;改变输出的显存地址
mov bx,88
mov cx,8
s2:
mov si,0
mov di,0
mov ax,1
call show
add bx,1
inc dh
loop s2
;以上完成第三列显示功能
mov si,0
mov di,0
mov ax,1
call show
add bx,1
inc dh
loop s2
;以上完成第三列显示功能
mov dh,8
mov dl,25 ;改变输出的显存地址
mov bx,96
mov cx,8
s3:
mov si,0
mov di,0
mov ax,3
call show
add bx,3
inc dh
loop s3
;以上完成第四列显示功能
mov si,0
mov di,0
mov ax,3
call show
add bx,3
inc dh
loop s3
;以上完成第四列显示功能
mov ax,4c00h
int 21h
int 21h
show:push cx
push si
mov cx,ax ;传入参数
ss0:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx ;行列位置的数据压栈
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx ;行列位置数据不变的出栈
pop ax
mov es:[bx+di],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss0
pop si
pop cx
ret
;该子函数显示字符串
push si
mov cx,ax ;传入参数
ss0:mov al,[bx+si] ;从数据源处得到数据
mov ah,01100000b
push bx
push ax
push dx ;行列位置的数据压栈
call cal ;mov bx,(dh-1)*160+(dl-1)*2得到显示处的偏移地址
pop dx ;行列位置数据不变的出栈
pop ax
mov es:[bx+di],ax ;往显存中传送数据
pop bx
inc si
add di,2
loop ss0
pop si
pop cx
ret
;该子函数显示字符串
cal:mov al,2
sub dl,1
mul dl ;计算列
mov bx,ax
mov al,160
sub dh,1
mul dh ;计算行
add bx,ax ;相加,得到地址
ret
;该子函数计算输出的显存地址
code ends
sub dl,1
mul dl ;计算列
mov bx,ax
mov al,160
sub dh,1
mul dh ;计算行
add bx,ax ;相加,得到地址
ret
;该子函数计算输出的显存地址
code ends
end start
补充:同样期待下一次的灵光一闪,当然这是基于知识面够充足的情况下。
0 0
- 课设二--显示字符到屏幕
- 阿里___字符从键盘输入到屏幕显示过程
- 汇编程序在屏幕显示字符
- 汇编语言之屏幕字符显示
- 从按下键盘到屏幕上显示字符计算机经过了哪些过程
- 汇编语言中如何在屏幕显示字符
- 字符输入函数在屏幕的显示
- 将div显示到屏幕中央
- Qt QDialog窗体显示到屏幕中央
- ListView footer怎么显示到屏幕底部
- 裸机S3C6410显示控制器(4)- 显示图像到屏幕
- android textview 中超出屏幕宽度的字符 省略号显示
- android textview 中超出屏幕宽度的字符 省略号显示
- android 中超出屏幕宽度的字符 省略号显示
- android textview 中超出屏幕宽度的字符 省略号显示
- android textview中超出屏幕宽度的字符 省略号显示
- android textview 中超出屏幕宽度的字符 省略号显示
- android textview 中超出屏幕宽度的字符 省略号显示
- R使用总结
- Nginx负载均衡的4种方案配置实例
- 关于Android滑动冲突的解决方法(二)
- #leetcode#237. Delete Node in a Linked List
- Hadoop学习(一) — 初识Hadoop
- 课设二--显示字符到屏幕
- Jquery学习第一步
- Dialog源码分析
- Java类集笔记
- POJ-2513 Colored Sticks
- hdu3586(树形dp+二分)
- 关于one-hot编码引发相关问题的一点感想
- java编写了24小时制的时间加减
- adb启动activity