-
1.如果資料段未結束,請新增 dseg ends2宣告資料時,db後面應該有空格,你不是自由的。
3.第十三次應該是測試,而不是文字
更正如下:dseg 段
strn db 'abcdefghijklmnopquvw','$'
n db ?
dseg ends
cseg segment
assume cs: cseg, ds: dsegstart: mov ax, dseg
mov ds, ax
lea si, strn
mov dl,0
again: mov al,[si]
cmp al,'$'
je done
test al,0ffh
jpe next
or al,80h
mov [si],al
inc dl
next: inc si
jmp again
done: mov n,dl
mov ah,4ch
int 21h
cseg ends
end start
-
這有點不對勁。
data segment
da1 dw 1234h,5678h,3456h,0a53h ;開口數。
count equ ($da1)/2
pfg db count dup (0) ;儲存平方根。
data ends
stack1 segment para stackdw 20h dup (0)
stack1 ends
code segment
assume cs: code,ds:data,ss:stack1being: mov ax , data
mov ds , ax
mov cx , count
lea si , da1
lea di , pfg
lop: mov ax , si] ;取要開啟的方格數。
push cx ;儲存資訊。
call sqr_proc ;呼叫子例程。
mov [di] ,cl ;儲存平方根。
pop cx ;恢復資訊。
add si , 2 ;修改指標。
inc di
loop lop
mov ah , 4ch
int 21h
sqr_proc proc ;開啟平方根子例程。
xor cl ,cl
mov dx ,1
sqr: sub ax , dx
jb exit
inc cl
add dx , 2
jmp sqr
exit: ret
sqr_proc endp
code ends
end being
-
操作步驟如下: <>
經過測試,程式的功能可以滿足問題的要求。
-
20000h單元的內容為20 h,20006h單元的內容為33 h,SI的內容為000c h,MOV SI後,執行偏移B2。
第三個空白應填寫為 000c。
關鍵是這句話:b1 db'3ac5$ 空'
注意? 這裡面有乙個“空間”。
樓上的兩人都低估了“空間”。
-
首先,標題本身有一點錯誤。
B2 dB B1 錯誤,應更改為 B2 DW B1。
由於 b1 用於資料定義的運算元,因此它表示其 16 位偏移位址,不能在 db 定義的 8 位變數中使用。
分析資料段中的資料儲存情況
實體地址資料。
20000h 20h ;W1 的第乙個站點是 3220001h 20h
20002h ffh ;W2位址,每個位址佔兩個位元組20003h ffh
20004h 41h
20005h 00h
20006h 33h ;B1,第乙個是“3”
20007h 41h ;這是“乙個”
20008h 43h ;這是“c”
20009h 35h ;這是“5”
2000ah 24h ;它是'$'
2000bh 06h ;B2 的第乙個位址儲存在 B1 的偏移位址 0006h
2000ch 00h
儲存資料後,很容易找到答案。
1.20000h單位的內容是十進位數32,即20h2單元20006h的內容為33h
3.偏移量 B2 是 B2 000BH 的偏移位址
-
m1 db 32,20h
m2 dw -1,41h
b1 db '3ac5$'
b2 db b1
標籤的實際含義是線段的偏移位址,其中m1=0000h,m2=0002h,b1=0006h,b2=000bh
載入標籤有兩個常用值:MOV 命令模式需要偏移量來修改標籤,而 LEA 命令模式不需要偏移量修改。
資料段開頭的位址是20000h,表示段偏移位址從0000h開始的單位,即M1處的單位內容為十進位數32,即十六進製表示為20h,20006h表示0006h,即B1處的單位內容, 這是 3 的 ASCII 程式碼,十六進製是 33h
mov si,offset b2 相當於 lea si,b2; si=b2=000bh
這是乙個基本問題。
-
不保證是對的。
3 ax bx cx dx
4 4200h
5 訂單。 結構 分支結構 環狀結構。
7 d8 a
9 c10 d
11 a12 b
13 將組合語言源程式翻譯成目標程式。
14 即時定址 暫存器定址 直接定址暫存器 間接定址暫存器 相對定址 基址加變數定址 相對基址加變數定址。
15 資料傳輸 算術運算 邏輯運算 序列運算 程式控制 處理器控制 16 用於告訴彙編者如何組裝的指令。
17 1.分析問題並抽象出描述問題的資料模型 2.確定問題的演算法思路 3.繪製流程圖或結構圖 4.分配記憶體和工作單元(暫存器) 5.逐個編寫程式 6.在計算機上進行靜態檢查和除錯。
18 初始化部分 環體部分 調整部分 控制部分 19 in al, 21h
mov dx,1200h
out dx,al
20 mov ax,12h
mov bx,34h
mov cl,8
shl ax,cl
or ax,bx
21 codes segment
assume cs:codes
start:
mov bx,1010101010101010bmov cx,4
s1:mov bp,4
xchg cx,bp
rol bx,cl
xchg cx,bp
mov ax,bx
and ax,0fh
cmp ax,10
jb s2add ax,7
s2:add ax,30h
mov dx,ax
mov ah,2
int 21h
loop s1
mov ah,4ch
int 21h
codes ends
end start
-
if (interrupt enable) - 位 9,中斷許可權標誌。 控制處理器對可遮蔽硬體中斷請求的響應。 設定 1 可啟用可遮蔽硬體中斷響應,設定 0 可關閉可遮蔽硬體中斷響應。
執行 int8 後,if 標誌從“允許中斷 (EI)”更改為“禁止中斷”(DI),即從“1”變為“0”。 因此,x2xx 變為 x0xx。
CPL、IOPL 和控制暫存器 CR4 中的 VME 標誌確定 CLI、STI、POPF、POPFD 和 IRET 指令是否可以修改 IF 標誌。
希望它有所幫助。
-
標誌的 0200h 位 IF 是中斷允許標誌,0 表示禁止響應硬體中斷,1 表示允許硬體中斷。
執行CLI命令後,if=0; 執行 STI 後,if=1
當中斷器結束時,它包含 popf 並恢復之前的標誌
-
在 16 位組合語言中,實體地址 = 段位址 * 16(即十六進製為 10h,即二進位中左移 4 位,或卦中左移 1 位)+ 偏移位址,構成乙個 20 位位址(因為 8086CPU 有一條 20 位位址線)。 所以這個問題的PA=DS*16+1352H=10000+1352=11352H(通常表示為1000:1352)。
指令 mov ax [1352h] 是將儲存在位址 1000:1352h(預設段位址為 DS)的資料傳送到暫存器 ax(未計算,此處位址為 1000; 1352h 處的值應為 26ffh),其中 AH 為 8 位高,Al 為 8 位低。
希望它有所幫助。
-
ob4h對應的二進位為10110100,第一位為符號位,即1。
如果是無符號的,則為10110100,如果轉換為十進位,則為180,如果有符號,則為-0110100,如果轉換為十進位,則為-76。
11h對應的二進位是10001,完成8位是00010001,第乙個數字是符號位,是0。
如果認為是無符號的,則為00010001,如果轉換為十進位,則為17,如果視為有符號,則為+0010001,轉換為十進位的17。
可以看出,由於第乙個位置是0,所以不管是有符號還是無符號都是一樣的。
如果第乙個數字是1,則有符號時為負數,無符號時為整數,結果不同。
-
有符號數字,由補語表示。
房東去看了補品的相關知識,沒有這樣的問題。 參考。
-
0b4h=1|011,0100b
011h=0|001,0001b
注意:“|“Before is the sign bit”是乙個四位分隔符。
我看不懂了,輔導原始碼,補碼的知識。
-
mov si,0024h ;si=24h
mov bx, si ;bx=24h
mov si,[si] ;si=6f72h
or si,0ffh ;si=6fffh
and si,[bx] ;si=6f72h
執行上述程式片段後,(si)=6f72h,(cf)=0,of=0;
我也有 0 個基本程式設計。
從王爽老師的《組合語言》一書開始,通俗易懂,如果不是這本書,也許我早就放棄學習程式設計了,學完這個看了譚浩強的《C語言程式設計》,只看前幾章,以win32彙編為基礎,Windows下的彙編和C很像, 再學習羅雲斌的《Windows環境下的32位組合語言程式設計》,學完這本書就上手了。 >>>More
mov dx,3 是初始化 dx,注意 dx 中的二進位是 0000 0000 0000 0011,稍後會用到。 >>>More