实验七

思路

首先你要摆出两个数据块从头到尾的读写对应的内存地址

data table 说明
0 0 写年份的第一个‘1975’的第一个字符‘19’,这里都是第一个字符
2 2 写‘1975’的‘75’,第二个字符
0054h+0h 5h 写年收入的第一个16,虽然table数过去是第5h个字符,但是data已经要跳到年收入的地方,也就是往后移21*4=84,换做16进制就是54h。那么相应地内存地址就应该加上0054h
0054h+2h 7h 同上
0108h+0h 0ah*** 这里是从年收入要跳到雇员人数,依旧要加0054h
4h+0h 10h+0h 写年份的第二个‘1976’,因为往后移了一个年份,内存地址要加4h
4h+2h 10h+2h 写‘76’,同上
0054h+4h+0h 10h+5h 写年收入的第二个,22
0054h+4h+2h 10h+7h 写年收入的第二个,22,分开两次写是因为年收入定义的是一个双字型数据,有4个字节,寄存器一次可以处理两个字节,所以需要2次
0108h+2h+0h 10h+0ah*** 写雇员的第二个数据——7,因为7是一个字符型数字,只有2个字节,所以这里的偏移不是4,是2

……
注意在源程序里不允许数据是以字母开头的,如果有就在前面加0

结论

  1. 首先我们确定一定需要用循环,因为纯手写太麻烦了,而且显而易见,这个读写的内存地址是有规律的。
  2. 那么我们来确定有那些是要写做循环中的“变量”,那些是固定的。
  3. 在data里的0054h、4h和2h是变量,决定data内数据的内存地址偏移。剩下的0和2就是固定的,表示一个数据内部的相对位置了。
  4. 在table里显然是10h是变量
  5. 然后我们来确定哪些变量是累积变量,也就是说在循环后不会重新赋值的,而是随着循环累积的。显然0054h决定的是数据从年份到年收入到雇员,这个循环每一次都应该从年份开始,所以是每一次循环都要重置的。而在每一类数据的内部的位置是会随着循环不断增加的,比如一开始都是读取每一类数据的第一个数据,循环一次后读取第二个数据,这个就不需要重置。
  6. 那么累积变量有4h和2h以及10h
  7. 至于0054h则需要每一次循环的开始重置为0
    于是,规定好这些变量放在哪个偏移地址寄存器里。(bx、bp,si,di***
    注意bx不能和bp一起用,si也不能和di一起用)

代码

assume cs:code,ds:data,es:table    
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  
  
code segment  
start:  
    mov ax,table
    mov ds,ax
    
    mov ax,data
    mov es,ax
    
    mov cx,21
    mov bx,0
    mov di,0
    mov si,0
    
s0: mov bp,0
    mov ax,es:[bp+di]
    mov [bx],ax
    mov ax,es:[bp+di+2]
    mov [bx+2],ax
    
    add bp,54h
    
    mov ax,es:[bp+di]
    mov [bx+5],ax
    mov ax,es:[bp+di+2]
    mov [bx+7],ax
    
    add bp,54h
    
    mov ax,es:[bp+si]
    mov [bx+0ah],ax
    
    add bx,10h
    add di,4h
    add si,2h
    
    loop s0
    mov ax,4c00h  
    int 21h  
code ends  
end start  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容