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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用)

發布時間:2025/6/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

尋址方式小結:

尋址方式含義名稱常用格式示例
[idata]EA=idata,SA=(ds)直接尋址[idata]
[bx],[si],[di]EA=(bx)或(si)或(di),SA=(ds)寄存器間接尋址[bx]
[bp]EA=(bp),SA=(ss)寄存器間接尋址[bp]
[bx+idata],[si+idata],[di+idata]EA=(bx)+idata或(si)+idata或(di)+idata,SA=(ds)寄存器相對尋址[bx+10]
[bp+idata]EA=(bp)+idata,SA=(ss)寄存器相對尋址[bp+10]
[bx+si],[bx+di]EA=(bx)+(si)或(bx)+(di),SA=(ds)基址變址尋址[bx+si]
[bp+si],[bp+di]EA=(bp)+(si)或(bp)+(di),SA=(ss)基址變址尋址[bp+si]
[bx+si+idata],[bx+di+idata]EA=(bx)+(si)+idata或(bx)+(di)+idata,SA=(ds)相對基址變址尋址[bx+si+10]
[bp+si+idata],[bp+di+idata]EA=(bp)+(si)+idata或(bp)+(di)+idata,SA=(ss)相對基址變址尋址[bp+si+10]

關于處理數據的長度

??????1,通過寄存器來指明要處理數據的尺寸。如mov ax,[bx]和mov al,[bx]分別針對的是內存中的字節單元和字型數據。
??????2,在沒有寄存器的情況下,可以用 數據長度 ptr 的格式來指明,其中數據長度可以為byte或word,分別表示字節和字。如下面幾種操作表示操作的是字型數據:
????????????mov word ptr ds:[0],1??????可將數據直接傳送到字型內存單元。
????????????inc word ptr ds:[0]
????????????add word ptr [bx],1
??????對字節單元的數據采用 byte ptr。
??????3,在push和pop中不需要指明內存單元的長度,因為只能是字型數據。如:push ds:[0]

實驗7

??????將data段中21年的數據按照填入table表中,其中人均收入需要計算。table表一共21行,每一行共計16字節,格式如下:

年份(4字節)空格收入(4字節)空格雇員數(4字節)空格人均收入(2字節)空格

??????程序如下:

assume cs:codedata segamentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995'//用21個字符串來表示年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 245980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000//用21個雙字型數據來表示公司每年的總收入dw 3,7,9,13,28,38,130,220,476,778,100,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800//用21個字型數據來表示公司每年的員工數量data endstable segmentdb 21 dup('year summ ne ?? ')table endscode segmentstart:mov ax,datamov ds,ax 用ds來存放數據段的段地址mov ax,tablemov es,ax 用es來存放table段的段地址mov di,0 di保存table中每一行的初始地址mov bx,0 bx表示數據段起始的偏移地址。mov al,21mov dl,8mul dlmov si,ax 計算21*8的字節數,保存到si,這是雇員數在數據段的起始偏移地址mov cx,21 外層循環次數21次s: mov ax,[bx]mov es:[di],axmov ax,[bx+2]mov es:[di+2],axmov ax,[bx+84] bx+84為總收入的偏移地址mov es:[di+5],axmov ax,[bx+86]mov es:[di+7],axmov ax,[si]mov es:[di+10],axmov dx,[bx+86]mov ax,[bx+84]div word ptr [si] 計算人均收入mov es:[di+13],axadd di,10hadd si,2add bx,4loop smov ax,4c00hint 21hcode endsend start

??????注明:空格已經在table段給出,故沒必要在程序在設置空格符了。關于用ax作為周轉寄存器執行從內存到內存的數據傳送,建議可以用棧來代替。關于乘除法的運算規則可以參考https://blog.csdn.net/Little_ant_/article/details/108149575

總結

以上是生活随笔為你收集整理的汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

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