日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言 【大练习】寻址方式在结构化访数据访问中的应用

發(fā)布時間:2024/2/28 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言 【大练习】寻址方式在结构化访数据访问中的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題源:王爽《匯編語言》第八章 實驗七

題目要求

匯編易錯點

用mov賦值的時候,操作數左右寫反,本來想寫mov ax,5 卻寫成mov 5,ax

不看字節(jié)長度就直接寫入,覆蓋后面數據:比如把ax中的數據寫入以byte形式存儲的連續(xù)數據區(qū)

一些小技巧

當寄存器、段寄存器不夠用時,將臨時數據存入數據段或棧段中,等需要使用的時候再取出

本題思路

循環(huán)嵌套(兩層)

外層大循環(huán)控制tablesg段的每一行
內層3個小循環(huán)控制分別把年份、收入、雇員數數寫入tablesg段中,3個小循環(huán)之后用div除法指令計算人均收入,也寫入tablesg段中

執(zhí)行過程截圖

debug模式

執(zhí)行指令之前,內存中初始數據展示:

第一次外循環(huán)中,執(zhí)行完第一個內循環(huán)year

第一次外循環(huán)中,執(zhí)行完第二個內循環(huán)income

第一次外循環(huán)中,執(zhí)行完第三個內循環(huán)income

第一次外循環(huán)中,執(zhí)行完后續(xù)除法運算

執(zhí)行完所有外循環(huán)后的結果


執(zhí)行完畢~

代碼




以下可復制

assume cs:codesg,ds:datasg,ds:tablesg,ss:stacksg datasg segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';以上是表示21年的21個字符串 21*4=84個字節(jié) 地址(十進制)0~83dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司總收入的21個dword型數據 21*4=84個字節(jié) 地址(十進制)84~167dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;以上是表示21年公司雇員人數的21個word型數據 21*2=42個字節(jié) 地址(十進制)168~209dw 0,84,168;臨時存儲偏移量 210 211 212datasg endstablesg segmentdb 21 dup('year summ ne ?? ') tablesg endsstacksg segment stackdw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;多給了兩個 stacksg endscodesg segment start: ;ax 臨時;bx 定位tablesg的行;cx 循環(huán)次數;dx;ds 存放datasg首地址;si 利用內存空間的取出和存入,逐字節(jié)讀取datasg中的:年份\收入\雇員;datasg首地址放進 段寄存器ds 中mov ax,datasgmov ds,ax;tablesg的首地址放進 段寄存器es 中mov ax,tablesgmov es,ax;bx定位tablesg的行mov bx,0;循環(huán)21次mov cx,21 line: push cx ;cx值存入棧mov cx,4mov di,0year: mov ax,ds:210 ;從內存中取出simov si,axmov al,ds:[si] ;ds中年份數據放進al中mov es:[bx+di],al ;al數據放進tablesg第bx行di位置inc siinc di ;si指向下一個mov ds:210,si ;si存到內存中l(wèi)oop yearmov di,5 ;4是空格,收入從5開始mov cx,2 income: mov ax,ds:212 ;從內存中取出simov si,axmov ax,ds:[si] ;ds中收入數據放進ax中mov es:[bx+di],ax ;ax數據放進tablesg第bx行di位置inc di ;tablesg偏移inc diinc si ;datasg偏移inc simov ds:212,si ;si存到內存中l(wèi)oop incomemov di,10 ;9是空格,雇員從10開始mov cx,2 people: mov ax,ds:214 ;從內存中取出simov si,axmov al,ds:[si] ;ds中雇員數據放進al中mov es:[bx+di],al ;al數據放進tablesg第bx行di位置inc si ;si指向下一個inc di mov ds:214,si ;si存到內存中l(wèi)oop peopleaver: mov ax,es:[bx+5] ;被除數(收入)4字節(jié)=32位,ax存放低16位,從當前行位置5取出mov dx,es:[bx+7] ;dx存放高16位,從當前行位置7取出div word ptr es:[bx+10] ;除數(雇員)16位,從當前行位置10取出,與ax,dx中的被除數相除,商存在ax中mov es:[bx+13],ax ;al商中的商放進當前行位置13處pop cx ;cx的值pop回去add bx,10h ;下一行l(wèi)oop linemov ax,4c00hint 21h codesg ends end start

總結

以上是生活随笔為你收集整理的汇编语言 【大练习】寻址方式在结构化访数据访问中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。