組合語言裡的清零(答對給分,20以上)

時間 2021-08-13 16:50:32

1樓:文刀舍予

還有就是將偏移置零的時候將暫存器清零

你舉的那個例子裡的xor bx,bx就是將偏移置零的,bx不是定址的暫存器嘛

如果你要用一個暫存器計數,首先要將這個暫存器清零,然後在迴圈過程中加一,然後當暫存器的數為某個數的時候就退出迴圈,不過好像基本沒有這麼用的,舉個例子而已

如果之前有賦值指令,也就是你舉的那個例子了→mov cx,n

就不用清零了

n估計是個串的長度,應該在資料段是定義好的

這中方法的好處是在減一的過程中用jnz就能作為退出迴圈的開關

在賦值之前不用將暫存器清零,直接就覆蓋了清不清零有什麼區別啊

回答的挺囉嗦,你努力看一下吧

2樓:

所謂清零,說穿了就是初始化,或者說賦初值,或重置初值.

在這個程式裡,bx的初始值為0,所以,可以這樣:xor bx,bx

而cx的初始值是n,不用多餘地先xor cx,cx,直接mov cx,n就可以了.

3樓:

你看一下bx,和cx是用來幹什麼,bx是用來定址的,不清零的話source[bx+n]是什麼鬼才知道,cx是用來計數的,可能後面還有一段迴圈,cx裡的n就表示迴圈次數,清零幹什麼。

組合語言中如何對暫存器清零

4樓:匿名使用者

一般常用 xor指令

不但指令短,而且執行速度快。

5樓:匿名使用者

樓上的第三種好,只是在暫存器間操作,沒有到記憶體取數

6樓:鯤鵬展翅

以暫存器ax為例

1.mov ax,0

2.and ax,0

3.xor ax,ax

組合語言中,出棧後 出棧的那個數值在棧中會被清零嗎?

7樓:匿名使用者

不會被清零。

組合語言中,出棧是通過pop指令來實現的,首先看一下intel手冊中對於pop指令的描述:

大致意思如下:pop指令從棧頂載入值到目標運算元指定的位置,然後增加棧頂指標。目標運算元可以是一個通用暫存器,記憶體位置或者段暫存器。

可以看到,手冊中並沒有提到出棧後pop要清空原有位置的值。因為這是不必要的,正常使用棧的話,出棧後那個位置的數值對棧沒有影響,在棧增長後,那個位置可能會被新的值覆蓋掉(即通過push壓棧),所以沒有必要清空它。而且,處理器和指令集設計的時候,必然會十分注重效率,不會做多餘的事情,清不清零對棧的使用完全沒有影響,所以設計師當然也不會讓pop做這件事。

8樓:匿名使用者

組合語言中,出棧後 出棧的那個數值在棧中 不會 被清零,

但是 如果有 新的 壓棧操作(入棧),會被新的資料替代。

9樓:匿名使用者

不會被清零,但是這個資料正常情況下不會被訪問到,除非特意去訪問這個資料

10樓:匿名使用者

出棧後 出棧的那個數值在棧中不會被清零 只是sp-1指向上一個棧地址了

11樓:匿名使用者

不會清零。

pop dst  指令執行過程:

(dst)<-((sp)+1, (sp))(sp)<-(sp)+2

可見,棧中資料並無變化,只是sp指標+2。

12樓:匿名使用者

不會清零。不信的話到原地址去看看原數變了沒。

13樓:魔塔過客

出棧操作其實變的只是指標sp.....原數值仍舊保留

14樓:

不會,是原封不動的,所以說自動變數總是一個隨機值,你每次宣告一個自動變數,棧指標就會增加,新變數的值實際上是上一次使用該記憶體的變數值。。。

在組合語言中怎樣將一個資料段全部清零 15

15樓:匿名使用者

;功能:顯示當前目錄下的文字檔案內容

eof = 1ah

dseg segment

fname db 'e:\asm\test.bat',0 ;檔案完整路徑名

error1 db 'file not found',07h,0 ;提示資訊

error2 db 'reading error',07h,0buffer db ? ;1位元組的緩衝區dseg ends

cseg segment

assume cs:cseg,ds:dsegstart: mov ax,dseg

mov ds,ax

mov dx,offset fname

mov ax,3d00h ;為讀開啟指定檔案int 21h

jnc open_ok ;開啟成功,轉

mov si,offset error1

call dmess ;顯示不成功資訊jmp over

open_ok:mov bx,ax ;儲存檔案柄cont: call readch ;從檔案中讀一個字元jc readerr ;如讀出錯,則轉

cmp al,eof ;讀到檔案結束符嗎?

jz type_ok ;是,轉

call putch ;顯示所讀字元

jmp cont ;繼續

readerr:mov si,offset error2call dmess

type_ok:mov ah,3eh ;關閉檔案int 21h

over: mov ah,0 ;結束程式int 16h

mov ah,4ch

int 21h

readch proc

mov cx,1 ;置讀位元組數

mov dx,offset buffer ;置讀緩衝區地址mov ah,3fh

int 21h

jc readch2 ;讀出錯,轉

cmp ax,cx ;判斷檔案是否結束mov al,eof ;檔案結束,置結束符jb readch1 ;檔案結束,轉

mov al,buffer ;檔案未結束,取所讀字元readch1:clc

readch2:ret

readch endp;;

;;顯示一個以0為結束符的字串

dmess proc

dmess1: mov dl,[si]

inc si

or dl,dl

jz dmess2

mov ah,2

int 21h

jmp dmess1

dmess2: ret

dmess endp

;顯示一個字元

putch proc

push dx

mov dl,al

mov ah,2

int 21h

pop dx

retputch endp

cseg ends

end star

我剛開始學彙編,這是書上一個例題,給你看看,masm編寫的

16樓:匿名使用者

clear:

cld ;清除方向標誌位

lea di,[2000h] ;設定起始地址mov cx,128 ;設定要清零的字數xor ax,ax ;ax清零

rep stosw ;重複串操作,將128個字清零

組合語言中 cy能自動清零嗎

17樓:無畏無知者

cy自動清零,什麼意思?

通過相關指令的執行,cy會被清零;

在組合語言中怎樣將資料段全部清零

功能 顯示當前目錄下的文字檔案內容 eof 1ah dseg segment fname db e asm test.bat 0 檔案完整路徑名 error1 db file not found 07h,0 提示資訊 error2 db reading error 07h,0buffer db 1位...

組合語言中的返回指令rst問題,組合語言中的返回指令Rst問題

先澄清一下你問得模糊的地方。1 你說的 rst 返回指令應該是 ret 吧?2 sp 不叫堆疊指令,它是堆疊指標,估計是stack pointer的首字母。該指標總是指向堆疊的棧頂,即始終存放的是棧頂的地址。堆疊的工作原理可簡述為 後進先出 即lifo,last in first out。具體解釋請...

關於組合語言移植性的問題,關於組合語言中的LOOP指令

兄弟,你理解錯了,首先你要明白,組合語言是一種針對具體機器的低階語言,這裡說的不同機器一般來講是指cpu指令系統不相相容的兩種機器,比如常用的8086與51,dsp,arm,等等,他們的指令系統都不是通用的。自然移植到別的機器上不行,舉個例子來說吧,假如51,的p0埠可以用來點亮一盞燈,但是對808...