LinuxDeepin 发表于 2020-1-4 17:01:11

实验7 作业题优化成果

好久没有用汇编了,最近重新复习

先说一下编程思路:
        源数据和表格数据地址存放在不同位置,为了方便定位,需要使用两个段寄存器
       
        年份数据为四个字符串,单个字符串占用1个字节
        四个字符串则相当于双字型数据
        可使用两个寄存器存放年份字符串的 高位、低位数据
        然后复制到表格年份处
       
        收入数据为双字型数据,并且还是被除数,需要参加除法运算
        此时可直接复制到除法运算相关寄存器中,顺便复制到表格收入处
        雇员人数为字型数据,并且是除数,可复制到除法运算相关寄存器中
        顺便复制到表格雇员人数存放处

        然后进行除法运算,结果商存放在除法运算相关寄存器中
        将结果直接复制到表格人均收入处
       
        递增相关寄存器用于指向下一位相关数据,循环21次即可


实验七作业程序优化代码如下:
**** Hidden Message *****

XT孓珏 发表于 2020-2-16 15:34:46

来康康

major_lyu 发表于 2020-2-17 00:03:30

本帖最后由 major_lyu 于 2020-2-17 00:12 编辑

我的代码如下:望大神批评指正!

assume cs:code,ds:data

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'
;年份(0~53H)
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;总收入(54H~A7H)
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;员工数(A8H~D1H)
data ends

table segment
        db 21 dup('year summ ne ?? ')
table ends

code segment
start:mov ax, data
                        mov ds, ax
                        mov ax, table
                        mov es, ax
                       
                        mov bx, 0
                        mov si, 0
                        mov di, 0
                        mov cx, 21
                       
                s:      mov ax,          ; 写入年份数据,可以以字为单位操作,减少指令数量,发挥16位机优势
                        mov es:,ax
                        mov ax,
                        mov es:, ax
                       
                        mov ax,54h    ; 写入总收入数据
                        mov dx,56h
                        mov es:5h, ax
                        mov es:7h,dx
                       
                        div word ptr ds:0A8h;计算并存储人均收入。由于总收入数据已经在ax, 和dx中了,所以将这一步提前,可以减少数据读取
                        mov es:0Dh, ax
                       
                        mov ax, 0A8h; 写入人员数量数据
                        mov es:0Ah, ax
                                                       
                        add si, 2
                        add bx, 4
                        add di, 16
                        loop s
                       
                        mov ax, 4c00h
                        int 21h

code ends

end start

李清懋 发表于 2020-2-17 08:26:21

康康

gang19840815 发表于 2020-2-18 21:36:21

kankan

王君001 发表于 2020-2-22 19:00:27

学习学习

项羽姓秦 发表于 2020-3-2 01:42:02

看看

aatonghua 发表于 2020-3-6 22:30:19

看看

双人旁 发表于 2020-3-16 12:30:49

学习

449330787 发表于 2020-3-18 18:55:10

666

Tsncssyh 发表于 2020-3-20 09:32:30

1

Finally 发表于 2020-3-21 15:05:07

康康

mmy555 发表于 2020-3-25 17:45:03

1

威海小九 发表于 2020-4-7 16:13:17

1

紫吱吱吱吱皇 发表于 2020-4-16 14:38:22

看看

nemo666 发表于 2020-4-17 09:42:31

借鉴

SteveNASH 发表于 2020-4-22 22:04:39

学习学习

quiest80 发表于 2020-5-25 18:04:25

调试显不出来,把数字放入后,显示的是不认识的,要把收入和人数用完后,转成ASCII码????

一只奇犽犽 发表于 2020-6-12 14:04:34

学习

黑豆哥哥 发表于 2020-6-13 23:25:07

1111
页: [1] 2 3 4
查看完整版本: 实验7 作业题优化成果