Ⅰ 關於匯編語言的基本數據存儲問題
mov
ax,1
;寄存器賦1這個我知道,
mov
ds:[0],1
;這個是內存還是硬碟??
--------------內存
push
ax
;我提前定義了棧段,把ax壓入棧里,那麼我想問
,我們的棧是在內存,還是在硬碟存儲器里?
------------------------內存
pop
ax
;把棧頂值賦給ax,sp+2指向了下一個棧頂,那麼我們原是的(sp+2)-2的數據還在嗎?
;也是就出棧後在棧里的數據還在嗎?
---------在
問題二,我們匯編指令處理的數據idata
可以是各種數制嗎?
mov
ax,1
mov
bx,27
;這指令合法嗎?
------------合法
add
ax,bx
;這里運行後結果是10進制的數還是16進制數?----------------計算機只認二進制的數
Ⅱ 計算機指令主要存放在哪
計算機指令主要存放在存儲器。存儲器單元實際上是時序邏輯電路的一種。按存儲器的使用類型可分為只讀存儲器(ROM)和隨機存取存儲器(RAM),兩者的功能有較大的區別,因此在描述上也有所不同。存儲器是許多存儲單元的集合,按單元號順序排列。
每個單元由若干三進制位構成,以表示存儲單元中存放的數值,這種結構和數組的結構非常相似,故在VHDL語言中,通常由數組描述存儲器。
為提高存儲器的性能,通常把各種不同存儲容量、存取速度和價格的存儲器按層次結構組成多層存儲器,並通過管理軟體和輔助硬體有機組合成統一的整體,使所存放的程序和數據按層次分布在各存儲器中。
主要採用三級層次結構來構成存儲系統,由高速緩沖存儲器Cache、主存儲器和輔助存儲器組成。圖中自上向下容量逐漸增大,速度逐級降低,成本則逐次減少。
(2)我們存儲的匯編指令存儲在哪擴展閱讀:
回顧計算機的發展歷史,指令系統的發展經歷了從簡單到復雜的演變過程。早在20世紀50-60年代,計算機大多數採用分立元件的晶體管或電子管組成,其體積龐大,價格也很昂貴。
因此計算機的硬體結構比較簡單,所支持的指令系統也只有十幾至幾十條最基本的指令,而且定址方式簡單。到60年代中期,隨著集成電路的出現,計算機的功耗、體積、價格等不斷下降,硬體功能不斷增強,指令系統也越來越豐富。
Ⅲ 匯編語言中的指令應該在計算機的什麼地方編寫,如何運行
如果是單個匯編指令,可以用debug中的a命令來進行輸入指令,用t命令單步執行或者用g命令連續執行;
如果是完整的匯編語言源程序,就需要用文本編輯器(dos命令行中的edit或者windows的記事本都行)編輯成文件,記得擴展名是.asm,然後用masm.exe匯編生成obj文件,接著用link.exe生成exe文件就能運行了。
不過大部分匯編語言源程序都不編寫輸出代碼,所以生成exe文件之後,需要用到debug調試。建議學習一下debug的常用命令。用debug調試程序,很有趣的。
另外,masm.exe和link.exe這兩個文件操作系統里沒有的,需要到網上找一下。推薦匯編網www.asme.net給你,對於初學者來說,王爽的《匯編語言》+匯編網,是不錯的選擇。
Ⅳ 用匯編語言編寫51單片機程序,指令程序存儲在ROM里還是RAM里
程序指令智能存在ROM里,數據變數存在RAM里
Ⅳ 在匯編語言中調用函數後,函數返回值存儲在哪裡
調用函數後返回值都是存儲在EAX中
下面來看一下執行過程
在主程序中每次調用函數時,先依次把各參數以相反的順序入棧;
然後call func_name, 這里call要做兩件事: 一是把函數的返回地址入棧,二是讓指令執行指針%eip指向函數開始處。
開始執行
現在函數要開始執行了,但它執行函數代碼前還要做一點小事,首先把原來的基地址寄存器%ebp值入棧,因為在程序執行中%ebp要另作它用, 接著堆棧指針%esp的值復制給%ebp, 此後在函數執行中%ebp一直保持不變,可以由此定址獲得函數參數。
pushl %ebp
movl %esp, %ebp
下面開始執行函數代碼了。函數先要把它的局部變數保存在棧中,這很簡單。比如要保存一個long型數據,只要把%esp指針向下移動4個位元組(因為棧增長方向是由高地址到低地址),再根據%esp把該數據移入. 下面是保存兩個局部變數long後的堆棧內容:
Parameter #N <--- N*4+4(%ebp)
...
Parameter 2 <--- 12(%ebp)
Parameter 1 <--- 8(%ebp)
Return Address <--- 4(%ebp)
Old %ebp <--- (%ebp)
Local Variable 1 <--- -4(%ebp)
Local Variable 2 <--- -8(%ebp) and (%esp)
從上可以看出通過%ebp基地址定址可以訪問所有的函數參數和局部變數. 當然也可以不用
%ebp而用其它的寄存器進行同樣的基地址定址。但對於x86結構使用%ebp寄存器可能會更
快一點。
執行結束:
Ⅵ 匯編指令保存在哪裡
匯編語言中用3個概念來表達數據的位置。
(1)立即數(idata):包含在指令中的數據,執行前在cpu的指令緩沖器中。
(2)寄存器
指令要處理的數據在寄存器中,在匯編指令中給出相應的寄存器名。
(3)段地址(SA)和偏移地址(EA)
指令要處理的數據在內存中,在匯編指令中可用[x]的格式給出EA, SA在某個段寄存器中。
存放段地址的寄存器可以是默認的
Ⅶ 匯編語言存儲
不是匯編存放數據。是匯編可以告訴你計算機是怎麼在內存中存放數據的
我們學習匯編一般把內存看做平坦的,因為這樣便於操作,實際情況是根據操作系統不同,計算機在內存中存放數據是很復雜的,最基礎的像實際地址,邏輯地址什麼的
建議先學學8086的匯編指令,和dos的內存結構。
Ⅷ 匯編語言以___形式存儲在內存中,指令ADD BX,CX占內存___個位元組。
存儲單元會為bx和cx各分配兩個位元組
Ⅸ 匯編語言中指令END最終要存儲在程序存儲器中嗎
data segment
block db 16 p(?)
average db 0
data ends
code segment
start: mov ax,data
mov ds,ax
xor ax,ax
lea si,block
mov cx,16
_Add: mov bl,[si]
add al,bl
adc ah,0
inc si
loop _Add
div ax,16
mov average,al
mov ax,4c00h
int 21h
code ends
end start