8086組合語言簡單問題,一條簡單的8086組合語言提問

2022-11-19 12:40:49 字數 5388 閱讀 8824

1樓:

當然是mov cs:[bx],[sp]

add sp,2

但是隻是形式上等同,mov cs:[bx],[sp]不能被編譯,只有bx,bp,si,di,立即數及他們的組合可以出現在中,bx,bp不能同時出現,si,di也不能同時出現。

sp可以被認為指標

int *sp;

int a;

...mov a,[sp]相當a=*sp;

int *sp;

int *a;

...mov a,sp相當a=sp;

2樓:匿名使用者

sp表示偏移地址。

pop cs:[bx] 等同於

mov ax, ss:[sp]

add sp,2

mov cs:[bx],ax

3樓:匿名使用者

mov cs:[bx],sp 送到cs:[bx]的是sp暫存器的內容

暫存器加 就把暫存器的內容當做地址用了

不過sp不能做指標

應該是這樣

mov bp,sp

mov ax,ss:[bp]

add sp,2

mov cs:[bx],ax

4樓:平庸小魚

sp 是棧頂指標, pop cs:[bx]就是把cs:[bx]裡面的一個word壓到棧裡面,並且指標往下移一個word,也就是兩個位元組。

5樓:匿名使用者

8086堆疊 資料方式:先進後出或者後進先出,pop cs:[bx] 1、將ss:sp指向的記憶體單元的資料送入ax,然後地址加2,最後再把ax裡面的內容送入cs中,

注意出棧的順序:先推資料,然後地址加2

它為向下生長型的。

mov ax, ss:[sp]

add sp,2

mov cs:[bx],ax

一條簡單的8086組合語言提問 60

6樓:

這個程式有點錯誤. 改正後倒是可以在如xp等的控制檯視窗裡執行.

code segment

assume cs:code

e:mov ax,0b800h

mov ds,ax

mov al,'b'

push ax

call s11

mov cx,4c00h ; 誤,改成mov ax, 4c00h

int 21h

s11:mov bp,sp

mov ax,[bp+2]

mov ds:[1],01011001b ; 這是顏色值吧,寫成mov byte ptr ds:[1], 01011001b 更佳

mov ds:[0],al ;寫傳過去的ascii字元到視訊記憶體

ret 2

code ends

end e

最後是執行的時候要注意,最好在執行前先開好cmd視窗,在cmd命令提示符中把本程式所在的目錄設為當前目錄。

因為本程式直接訪問了視訊記憶體,所以要在虛擬86環境下執行,可能輸出的顯示效果有問題,且因為執行結果與螢幕有關,在執行前分別執行下cls(清屏)與

debug然後輸入q退出debug,

最後再輸入本程式可執行程式名執行,一般來說會看到執行結果。

7樓:宇文夢旋

mov指令的執行速度會比lea指令更快 再就是 offset 只能與簡單的符號地址相連 而不能和諸如var1[si]等複雜運算元相連 其他應該就沒什麼不同了

8樓:匿名使用者

程式裡面沒有要求顯示字元的dos中斷啊?

8086組合語言小問題

9樓:湯旺河邊

別的組合語言,我不瞭解。intel 8086/8088組合語言編譯器開始時所預設的整數進製為十進位制。指令:mov ax,25中的25,指十進位制的25。

可以用進位制偽指令radix來改變預設的進位制。

偽指令radix用來設定整數的預設進位制,巨集彙編開始時所預設的整數進製為十進位制。該偽指令的使用格式如下:

.radix exp

其中:偽指令前面要用點『.』開始,exp的值必須是區間[2, 16]內的一個整數。

該偽指令說明其下面整數的預設進製為exp。如果某整數已顯式地表明瞭其進位制,則該預設進位制對其不起作用。在原始檔中,可以使用多個radix偽指令來分別說明其後整數的預設進位制,但為了避免引起不必要誤會,我們不提倡這樣去做。

例如:.radix 8

b1 db 10, 11, 12 ;這三個數是八進位制數

db 10d ;這數是十進位制數,因為它已用'd'明確說明而不使用預設進位制

… .radix 10

mov ax, 1234 ;1234是十進位制數

mov ax, 1234h ;1234h是十六進位制數

10樓:匿名使用者

很明顯,如果沒有加h的話,這是預設為十進位制的,程式設計要注意這個問題。

11樓:闕向晨裘材

這兩個數的加法,已經產生了進位。

這個進位,要當做256,最終結果是263:

10000010

+10000100+1

-------------------

100000111

2567

=263

減法,就是借位的問題了,可以仿照上面分析計算。

8086組合語言小問題.謝謝

12樓:頹廢_小胖

1. 'what is you name ? $' 1個字元佔一個位元組,你可以自己數一下。

不管你用'a'還是ask碼結果都是ask碼,只是編譯器自動將你的'a'轉成了ask碼。

2.這個問題比較複雜,回車實際上回到行首,而換行是換一行,在不同的作業系統裡的規定是不一樣的。我給你找一段資料你自己看看,不懂再問。

回車」(carriage return)和「換行」(line feed)這兩個概念的來歷和區別。

在計算機還沒有出現之前,有一種叫做電傳打字機(teletype model 33,linux/unix下的tty概念也來自於此)的玩意,每秒鐘可以打10個字元。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。

要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。

於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。一個叫做「回車」,告訴打字機把列印頭定位在左邊界;另一個叫做「換行」,告訴打字機把紙向下移一行。這就是「換行」和「回車」的來歷,從它們的英語名字上也可以看出一二。

後來,計算機發明瞭,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加一個就可以。於是,就出現了分歧。

unix系統裡,每行結尾只有「《換行》」,即"\n";windows系統裡面,每行結尾是「《換行》《回車 >」,即「\n\r」;mac系統裡,每行結尾是「《回車》」,即"\n";。一個直接後果是,unix/mac系統下的檔案在 windows裡開啟的話,所有文字會變成一行;而windows裡的檔案在unix/mac下開啟的話,在每行的結尾可能會多出一個^m符號。

c語言程式設計時(windows系統)

\r 就是return 回到 本行行首 這就會把這一行以前的輸出 覆蓋掉。

如: 最後只顯示 xixi 而 hahaha 背覆蓋了

int main ()

\n 是回車+換行 把游標 先移到 行首 然後換到下一行 也就是 下一行的行首拉

int main()

13樓:匿名使用者

1、兩種定義都可以了,定義'what is you name ?$'這個是19位元組呀

2、0d是回車,回到行首,0a是換行,回到行首後換下一行啊,不然再輸出會覆蓋已經輸出的字元啊,經典的用法是以前印表機(注意是以前,現在不行了)先打y,再打=,就成了¥了。

之所以你認為回車不就換行了嗎,這是作業系統自動進行的,不信,你在一個文字文件裡,只輸入一個回車,看屬性就變成兩個位元組。(windows系統下,在linux下文字文件中一個換行符就代表一個回車加一個換行,而且換行符還是回車鍵輸入的呢)

關於8086組合語言的基礎問題

14樓:

[1352h]預設在ds段,所以地址就是ds*16+1352h=31352h

0150h[bx]相當於[bx+0150h],寫法不同而已,所以地址就是ds*16+bx+0150h=31350h,

ch=88h,所以(31350)=88h,(31351)=3ch

8086組合語言的問題

15樓:

要求太多,分數又太低.你這個沒有寫出記憶體的儲存情況是沒辦法得到cl準確的值.

16樓:就是為了答題

請你把完整的題目寫出來,否則你這個題沒法做

有關8086組合語言的一些問題 50

17樓:茅尹

start:

mov bx, 1234h ;欲求:dx=12*34=0408h

;用 bh 控制迴圈,把 bl 內容累加

;----------------------------mov dx, 0

mov cl, bh

and cl, 0fh ;留下bh的個位mov ch, 0

lp1:

mov al, dl

add al, bl

daamov dl, al

mov al, dh

adc al, 0

daamov dh, al

loop lp1

;----------------------------mov cl, 4

shr bh, cl ;右移四位mov cl, bh ;留下bh的十位mov ch, 0

push cx

mov cl, 4

shl bx, cl

and bx, 0ff0h

pop cx

lp2:

mov al, dl

add al, bl

daamov dl, al

mov al, dh

adc al, bh

daamov dh, al

loop lp2

;----------------------------;執行到此處,即得出:dx=0408h。

18樓:沙裡波特

用原碼進行加減運算,少見!

沒有用的,不用理會它。

組合語言程式設計的問題,組合語言程式設計問題

1.jmp bx 如果 bx 1020h,那麼 ip 1020h,因為此種形式為通過暫存器的段內間接轉移,執行時將把暫存器的內容直接送ip,所以執行此指令後ip的值為1020h 2.jmp tab bx si 如果 ds 2000h,bx 1020h,si 0002h,tab 0010h,21032...

關於組合語言的迴圈問題,關於組合語言中的PUSH問題。

你理解bai從程式上面執行下來到du達 loop s後又去執行標zhi號s處,這沒錯。然dao後就內無限迴圈死,這就錯了容 組合語言的迴圈指令loop是有條件的,這個隱含操作和條件就是每迴圈一次,cx cx 1,如果cx 0,迴圈就結束了。在這個程式中,迴圈3次結束。關於組合語言中的push問題。每...

組合語言中的問題

此處指的是 mov cl,1234 需要4個機器指令週期 非也.指令長度就是指令長度.具體說,就是這句彙編語句翻譯成機器指令後所佔的位元組數.最直觀的莫過於用debug.exe的a命令輸入幾條彙編語句來看看了.執行debug,提示符下打a100回車,依此輸入 mov bx,1000回車,mov ax...