当前位置:网站首页>汇编语言学习(六)课程设计一
汇编语言学习(六)课程设计一
2022-08-09 13:30:00 【目标是技术宅】
本部分为第10章后的课程设计部分。
主要任务是将实验七中的Power idea公司的数据按照下图格式在屏幕上显示出来。

实验思路:
1.整个代码的主体是一个遍历21行的循环。
2.对于每行,最重要的工作就是将data部分的值复制到可在屏幕上显示的内存位置。
设定寄存器,data段部分,段地址用ds寄存器,偏移地址用bp和si寄存器。
屏幕显示部分,段地址用es寄存器,偏移地址用di寄存器。
注意每行开始时,需要重新给di赋值,每行结束后,需要对es、bp、si进行处理。
3.对于每行要复制的数据,首先将年份复制过来,之后通过调用函数转化和复制剩余数据。
4.编写子程序用于转化数据:
调用之前编写的防溢出函数,反复除以10后加30h入栈,然后出栈存入内存相应位置。
5.一定不能忘记,每个字占两个字单元,第一个字节存ASCII码,第二个字节存属性。
出现过的问题:
1.似乎使用[bp]默认的是ss:[bp],所以最好加上ds:[bp]。
2.按理说应该是从B8000h内存就可以显示,但是实际实验的时候B8168h都显示不出来。当时不知道出错原因,调试了很久……现在猜想可能是调试的时候按下回车键,导致往后退了几行。
3.另外寄存器比较少,所以需要提前规划好寄存器的使用。
代码为:
assume cs:code,ds:data,ss:stack
data segment
year db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
income dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
employeenum 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
stack segment
db 64 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,64
mov ax,0B82Ah
mov es,ax
mov bl,7
mov bp,0
mov si,0
mov cx,21
l: mov di,8
push cx
mov cx,4
l1: mov ah,ds:[bp]
mov es:[di],ah
mov es:[di+1],bl
add bp,1
add di,2
loop l1
pop cx
mov di,8
sub bp,4
mov dx,ds:[bp+86]
mov ax,ds:[bp+84]
add di,20
call dtoc
mov dx,0
mov ax,ds:[si+168]
add di,20
call dtoc
mov dx,ds:[bp+86]
mov ax,ds:[bp+84]
div WORD ptr ds:[si+168]
mov dx,0
add di,20
call dtoc
mov ax,es
add ax,0Ah
mov es,ax
add bp,4
add si,2
loop l
mov ax,4C00h
int 21h
dtoc: push cx
push si
mov si,di
mov cx,0 ;提前放入0,便于确认栈空
push cx
s: mov cx,10
call divdw
add cx,30h
push cx
mov cx,ax
add cx,dx
jcxz s1
jmp short s
s1: pop cx
jcxz ok
mov es:[si],cl
mov es:[si+1],bl
add si,2
jmp short s1
ok: pop si
pop cx
ret
divdw: push bx
push si
mov bx,ax
mov ax,dx
mov dx,0
div cx
mov si,ax
mov ax,bx
div cx
mov cx,dx
mov dx,si
pop si
pop bx
ret
code ends
end start实验结果:

还是满有成就感的啦ヾ(@゜∇゜@)ノ
边栏推荐
- Operating system migration practice deploying MySQL database on openEuler
- flink并行度知识点
- 使用 NVIDIA Kaolin Wisp 重建3D场景
- Jetpack Compose - Image using Coli load network Image (including GIF, SVG)
- The use of Jetpack Compose - Button (Button)
- 服务器被攻击了三次,还把我的数据库删除了,还想要我汇钱赎回数据
- 【面试高频题】可逐步优化的链表高频题
- Where to go to IOE-EBS
- 阿里云PAI与香港大学合作论文入选INFOCOM 2022,有效减少大规模神经网络训练时间
- Code of Conduct for Firefighters
猜你喜欢
随机推荐
Where to go to IOE-EBS
Spark Sql之join on and和where
浅谈CQRS模式
GridContainer of openharmony container component
pytest 与 unittest 的区别
几种常见路由类型及其优先级
pytest 之 fixture的定义及作用域
C语言 指针的解引用详解
From the Dutch flag problem to the optimization and upgrade of quick row
display:inline-block 什么时候不会显示间隙?
内容社区行业搜索最佳实践
ODA一体机有什么缺点
【LeetCode】1413. 逐步求和得到正数的最小值
vivo手机上的系统级消息推送平台的架构设计实践
目标检测类间不平衡问题
大规模并行分布式深度学习
LNMP架构搭建之论坛
响应式pbootcms模板外贸灯具类网站
pyautogui的简单操作(1)
【ClickHouse】 日志清理方法(query_log、query_thread_log)









