彙編源程式修改DS 2019後位元組的內容並完成相加,儲存到2019中

2022-06-23 14:10:02 字數 1603 閱讀 7918

1樓:卿巨集扶以彤

movax,dataseg

是將標識為dataseg的資料區首地址傳給axmovds,ax

暫存器賦值。因為8068/8088規定段暫存器不能直接賦值,必須要由暫存器給他傳值,因此想初始化資料段首地址必須要由ax中轉一下。

dw32

dup(0)告訴編譯器記憶體中預留32個4位元組,並全部填充為0

2樓:匿名使用者

貌似想直接訪問2000地址是輸入 a 2000

忘記了。

求高手寫組合語言,以ds:2000h為首地址,有若干資料,迴圈相加,當結果為200時程式結束,將結果儲存到al中

3樓:id雞蛋炒韭菜

mov bx,2000h

mov al,0

s: add al,[bx]

inc bx

mov cx,200

sub cl,al

loop s

以上**假設相加後一定會有一時刻al中的值是200.

如果相加過程導致al始終不等於200,那麼以上**無法停止

4樓:百度網友

改進 ”雞蛋炒韭菜“的**:

mov bx,2000h

mov al,0

dl,ffffh

s: tesp bx,bx

jz error

add al,[bx]

cmp al,200

loop s

jmp end

error:???

end:???

組合語言 程式執行後關於ds段暫存器的問題:

5樓:匿名使用者

程式載入後,ds中存放著程式所在記憶體區的段地址,而cs中的是**段的開頭段地址,預設便宜地址都是為0

0b2d:0000到0b3d:0000這段空間是256位元組,是psp區,是用來讓程式和dos進行通訊的

另外最好不要在code segment中定義資料,不然會吧資料當成**執行

可以另起一個data segment來定義資料

6樓:千葉郎君

由於本人工作環境不是8086架構,故而對於本人以下言論樓主應該持有保留態度。

ds 和 cs都是段暫存器,分別是資料段暫存器和**段暫存器,兩者之間也沒有什麼必然的聯絡。

程式原始碼中也沒有試圖主動修改這兩個段暫存器(**段基址暫存器的改變要通過跳轉指令),故而結束後是系統初始化時的段基址值。

ds和cs所指定的記憶體區域也沒有必然的連續性。

謬誤之處還請指正。

彙編,某程式裝入記憶體後。ds=1200h,cs=1400h,則程式中資料段中的資料最多是?位元組

7樓:只為醍醐灌頂

ds到cs之間一共可以有14000h-12000h=2000h個位元組,但前256個位元組是psp通訊區,不能屬於資料段,所以資料段最多可以是2000h-256=7936個位元組

8樓:做而論道

14000h-12000h=2000h=8192位元組。