博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言(王爽第三版)实验7 寻址方式在结构化数据访问中的应用
阅读量:3901 次
发布时间:2019-05-23

本文共 2321 字,大约阅读时间需要 7 分钟。

这个实验我自己摸索了好几个小时才弄出来,最后想通了发现自己把问题想复杂了。


1、个人认为最简单的方法
assume cs:code,ds:datadata 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,2558,2793,4037,5635,8226	dw 11542,14430,15257,17800data endstable segment	db 21 dup ('year summ ne ?? ')table endscode segmentstart:	mov ax,data	mov ds,ax	mov ax,table	mov es,ax	;初始化变量	mov bx,0  ;table 段的行	mov si,0  ;操作年份、收入数据的变量	mov di,0  ;操作雇员数的变量	mov cx,21s0:	;年份存入table段	mov ax,[si]	mov es:[bx],ax	mov ax,[si+2]	mov es:[bx+2],ax	;收入存入table段	mov ax,[si+84]	mov es:[bx+5],ax	mov dx,[si+86]	mov es:[bx+7],dx		;雇员数存入table段	mov bp,word ptr [di+168]	mov es:[bx+10],bp		;人均收入存入table段	div bp	mov es:[bx+13],ax	add bx,16	add si,4	add di,2	loop s0	mov ax,4c00h	int 21hcode endsend start

这个实验重点是:对数据的寻址方式,以及合理使用寄存器。

推荐一篇文章:

对上面这两点讲的比较细。弄清楚了这两点,再写代码就清楚了。


2、我第一次写的代码

表示代码逻辑再次看自己都看不懂 :( 哈哈。当时我是想尽量用到那个实验之前学到的所有知识点。事实也是如此我用到了之前学过的绝大部分知识。虽然最后代码逻辑复杂,但是收获满满。

assume cs:code,ds:data,ss:stackstack segment	db 200 dup(0)stack endsdata 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,2558,2793,4037,5635,8226	dw 11542,14430,15257,17800data endstable segment	db 21 dup ('year summ ne ?? ')table endscode segmentstart:	mov ax,data	mov ds,ax	mov ax,stack	mov ss,ax	mov ax,table	mov es,ax		mov di,0 ;全局读取数据的索引变量	mov bx,0 ;表格行	push 0   ;先将读取雇员数时的索引变量入栈	mov cx,21s0:	mov si,0 ;表格列    push di	push cx	mov cx,4		;年份	s1: 	    mov ax,[di]		mov es:[bx+si],ax		inc si		inc di	loop s1	pop cx		;分别用ax、dx储存收入的高四位和第四位	mov si,0	pop di	mov ax,[di+84]	mov es:[bx+5+si],ax	add si,2	add di,2	mov dx,[di+84]	mov es:[bx+5+si],dx	add di,2		;算出人均收入	pop si	div word ptr [si+168]	;雇员数存入table段	mov dx,word ptr [si+168]	mov es:[bx+10],dx	add si,2	push si	;人均收入存入table段	mov es:[bx+13],ax	add bx,16loop s0	mov ax,4c00h	int 21hcode endsend start

转载地址:http://ktden.baihongyu.com/

你可能感兴趣的文章
[已解决]AutoCompleteTextView 不显示匹配的内容,因为将空的内容添加进去了
查看>>
object c的浅拷贝(地址拷贝)和深拷贝(对象拷贝)
查看>>
object c son字符串的解析
查看>>
object c 非常强大的类的属性复制kcv键值码赋值
查看>>
Java中普通代码块,构造代码块,静态代码块区别及代码示例
查看>>
iOS 第4课 UILabel
查看>>
[已解决]junit.framework.AssertionFailedError: No tests found in
查看>>
“服务器端跳转”和“客户端跳转”的区别
查看>>
Datatables基本初始化——jQuery表格插件
查看>>
Servlet监听器——实现在线登录人数统计小例子
查看>>
Oracle笔记——简单查询语句 Oracle入门
查看>>
基于Hibernate和Struts2的用户管理系统小案例
查看>>
打开.class文件的方法
查看>>
基于windows平台Git+GitHub+Hexo搭建个人博客(一)
查看>>
基于windows平台Git+GitHub+Hexo搭建个人博客(二)
查看>>
Windows平台下SVN安装配置及使用
查看>>
python简便的编辑工具:jupyter notebook
查看>>
使用pip安装的时候出现 ModuleNotFoundError: No module named ‘pip‘
查看>>
Selenium自动化测试(八)之上传文件
查看>>
Selenium UI自动化(Java篇)
查看>>