指出以下彙編指令的錯誤
1樓:不能_放棄
1)mov ah,bx ;指令的兩個操作物件的位數不一致。
2)mov [si],[bx]
mov 指令可以有以下幾種形式:
mov 暫存器,資料。
mov 暫存器,暫存器。
mov 暫存器,記憶體單元。
mov 記憶體單元,暫存器。
mov 段暫存器,暫存器。
mov 暫存器,段暫存器。
mov 記憶體單元,段暫存器。
mov 段暫存器,記憶體單元。
-好像沒有mov 記憶體,記憶體---
3)mov ax,[si][di] ;si,di只能分開使用。
4)mov ax,[bx][bp] ;bx,bp只能分開使用。
5)mov[bx],es:ax ;這個是什麼?
6)mov byte ptr [bx],1000 ;它都說要傳 byte 了 你還閉拿硬塞個 word
7)mov ax,off sef [si] ;這個我不會。
8)mov cs,ax ;上面的列表有這種格式搭敬,所以他正確了!
本人初學,大家一起努力,儘量自己看書找資料,實在不懂再轎枝搭問!
2樓:網友
的長度比ah大其他的不含頌高興一一了都是彙編慧旦最簡單的題目了。拿本彙編前老擾書看看剛開始介紹mov語句的地方吧,這些都給你解釋一遍你還是不知道為什麼。
6、組合語言指令中的操作碼用於指出什麼?,運算元用於給指令的操作提供什麼?
3樓:網友
實際編制彙編不要去搞清操作碼是什麼,他的意義是指令的2進位**,運算元用於給指令的操作提供實際的數值,有位址和資料之分,要看其提指令情況。
4樓:網友
指令操作碼部分給出指令應該完成何種操作,其長度取決於指令系統中的指令條數。
運算元部分用來描述該指令的操作物件,如給出參與操作的運算元的值是多少或者指出運算元存放在何處、操作的結果應該送往何處等資訊。
5樓:三娘
1、操作碼告訴cpu幹什麼?
2、運算元用於給指令的操作提供操作物件。是操作碼的補充,操作碼加上運算元構成完整的指令。
3、有些指令只有操作碼沒有運算元,如停機指令,它已經能完整表達乙個動作。
4、大部分指令有1到3個運算元,如加減乘除,操作碼指定相加運算,但加什麼,誰和誰相加,由運算元指定。
彙編中,在執行程式前,為什麼要對執行的**段進行反彙編
6樓:
你才學彙編吧。
反編譯是用來除錯程式用的,並不是你說的在執行程式前一定要對**進行反編譯,你可以這麼理解,不是會使用程式的人都懂彙編,如果要求在使用程唯哪序前一定要進行反編譯的話,那麼又有幾個人會用這個程式了?
反編譯可以把已經編譯好的可執行檔案還原成彙編**,提供給能夠看懂彙編**的人觀察**的執行順序及其功能的,最初學的8086彙編的時候經常會用debug命令來反彙編程式,裡面用-t命令來單步執行命令,每執行一不觀察簡世一下暫存器的值是否和在編碼前預期的相符合,等8086學到中期的時候,能夠完成一些簡單的實用程式的時候,debug命令則通常是在程式執行失敗的時候來測試程式的,看程式執行到哪一步的時候出錯了,等查到錯誤之後在去修改原始碼重新編譯鏈結。
在win32彙編中也有反彙編的工具,比如ollydbg,作用也是除錯程式,在程式才編譯鏈結完後,執行出錯了,可以對程式進行除錯,找出錯誤的地方然後進行修改,這是因為這個原理,很多破解程式以及程式漏洞的搜尋都會用到反彙編來檢視程式的彙編**。
你只需要知道,執行程式前並不是一定要對**段進行反彙編,反彙編只是我們對代指咐碼碼進行的除錯罷了。
彙編問題
7樓:做而論道
要求橋凳:段位址 * 10h + 偏移位址 = 20000h即有: sa * 10h + 0000h ~ ffffh) =20000h
如偏移位址=0000h:
sa * 10h = 20000h - 0000h = 20000hsa = 20000h / 10h = 2000h如偏移位址=ffffh:
sa * 10h = 20000h - ffffh = 10001h此數值不合理。sa * 10h 的李首末哪消數尾數字,一定要是0。
所以,偏移位址,最大隻能是 fff0h。
如偏移位址=fff0h:
sa * 10h = 20000h - fff0h = 10010h即有:sa = 1001h。
8樓:網友
根據公式來計算啊。
段位址*10h+偏移位址=實體地址。
偏移位址0-ffffh
20000h-0~20000h-ffffh即20000h~10001h
然後除肢正薯以歷者10h
20000h/10h=2000h
10001h/10h=1000h,餘1
餘1,說明當段位址=1000h時,還不夠使實體地址達到20000h所清備以應該再加上1
所以段位址範圍為2000h~1001h
9樓:寶張萬
兩處錯誤。
第一處:mov al,[3+bx+si]
and al,11011111b
mov [3+bx+si],al
改成。mov al,[2+bx+si]
and al,11011111b
mov [2+bx+si],al
定址核耐錯誤數灶。
第二處:inc bx
改成。inc si
=完整程式===
assume cs:xh,ds:a1,ss:stacka1 segment
db ' helloss '
db ' world '
db ' nihaoa '薯氏扮。
db ' sijienihao '
a1 ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
xh segment
start:
mov ax,a1
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov bx,0
mov cx,4
s:push cx
mov si,0
mov cx,2
p: mov al,[2+bx+si]
and al,11011111b
mov [2+bx+si],al
inc si
loop p
pop cx
add bx,16
loop s
mov ax,4c00h
int 21h
xh ends
end start
彙編問題
10樓:網友
8kb=2^13b(2的13次方),所以位址匯流排寬度為13!不是12
反過來一樣,位址匯流排寬度為10,定址能力為1kb(2^10b)
11樓:我不爭
n=位址匯流排寬度 定址能力=2的n次 所以20位的位址匯流排定址能力為1m。
彙編問題
12樓:胖大海君
一段記憶體是這樣的。
2000:1000 be 00 6a
表示2000h為資料段的段位址 1000h為偏移位址 即段內的有效位址。
表示從偏移位址1000h處 開始存放的資料分別是 be 即1000h 存放的是 be 00 6a
即1000h 存放的是 be
即1001h 存放的是00
即1002h 存放的是6a
因此偏移位址1002h處的資料是 6ah
滿意的話 請選擇:滿意。
組合語言關於assume的用法,彙編偽指令 assume 具體作用是什麼
assume 段暫存器的說明語句 在組合語言源程式中可以定義多個段,每個段都要與一個段暫存器建立一種對應關係。建立這種對應關係的說明語句格式如下 assume 段暫存器名 段名 段暫存器名 段名,其中 段暫存器是cs ds es ss fs和gs,段名是在段定義語句說明時的段名。在一條assume語...
有關組合語言指令的問題
mov al,ebx 將ebx為地址中的內容放到al中,其中ebx為32位元暫存器,只使用低16位 mov eax,table bx 應該是talbe bx 吧,就是把段地址為table,偏移地址為bx的內容放到eax中,同上,只使用低16位 mov ax,ebx esi 將偏移地址ebx與變址es...
組合語言中的返回指令rst問題,組合語言中的返回指令Rst問題
先澄清一下你問得模糊的地方。1 你說的 rst 返回指令應該是 ret 吧?2 sp 不叫堆疊指令,它是堆疊指標,估計是stack pointer的首字母。該指標總是指向堆疊的棧頂,即始終存放的是棧頂的地址。堆疊的工作原理可簡述為 後進先出 即lifo,last in first out。具體解釋請...