❶ 匯編語言中數組如何保存
匯編這樣可以直接讀寫內存的程序也需要用到變數。但它不像其它高級語言那樣把變數分成許多類型,它是按照變數的長度來區分的,所以定義(define)變數時就用5個不同的關鍵字:db,dw,dd,dq,dt(事實上常用的只有db,dw)
db(define
byte)即定義的變數佔一個位元組的長度(也可以說把定義的變數值放入一個位元組的內存空間)
如:
a
db
7h
;意思是將7h放入內存的某一個鍵答辯位元組(空間)中,然後讓變數a指向這個位元組
也可以這樣:
a
db
'h'
;雖然『h』是個字元但存入內存卻成了它對應的ascii碼48h
你也可以用db來定義數組,如:
a
db
48h,
65h,
6ch,
6ch,
6fh,
00h
b
db
'hello',
0
這樣定義出來的a和b中的元素是完全相同的。
可以作如下引用:
mov
al,
a[3]
也可以用指針和變址寄存器(bx,
si,
di,
bp):
mov
si,
3
mov
al,
a[si]
如果你想定義一個具有一系列相同元素的數組可以用p關鍵字,如:
c
db
5
p(9)
與下面的效果相同:
c
db
9,
9,
9,
9,
9
d
db
5
p(1,
2)
相同於:
d
db
1,
2,
1,
2,
1,
2,
1,
2,
1,
2
如果你想把一個超過1位元組的值用db來定義是不可能實現的,編譯器會報錯,如:
a
db
1234h
;編譯時是不能通過的,報錯信息:cannot
convert
word
to
byte!
另外p的第一個操作數就是例子中的5,不能超過1020,否則會報錯:p
expansion
is
over
1020
chars!
以上是舉敗db的用法剩下的dw,dd,dq,dt與之大至相同,除了它們不能定義字元數組(因為ascii碼值就是0..255,一個位元組肯稿缺定能放下一個字元的ascii碼值)
dw(define
word)定義一個字(兩個位元組)長度
dd(define
double
word)定義雙字(4個位元組)長度
dq(define
quartet
word)定義四字(8個位元組)長度
dt(define
ten
byte)定義十位元組長度
❷ 求解一個簡單的匯編語言程序:給一段數據,將數據存儲到數據段中。(最好添加註釋)在線等!小女子不勝感激
這個登陸器是用易語言做的,而下載的時候應該是又一個dp1.fne支持庫文件的,可能打包後被意外刪除了,或者被你橋虛禪意外刪除了,你可以下載一個精簡版的易語言,然譽畢後放著,不用去管它,就可敏塵以用了,當然你也可以換一個登陸器。
精簡版下載地址(官方網站):
❸ 匯編語言怎麼從鍵盤輸入一個十進制的兩位數,並把它存到數組裡面
以下是輸入岩襲數組的子程序(注意其數據定義與代碼段同段)
;===================================================
; 鍵盤輸入數值數組子程序(數粗族兄組名為@array,元素個數存放在@num中)
; 可以是負數
INPUTNUM PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSHF
; 對數組@array清零
MOV CX,100
MOV AX,0
LEA DI,@ARRAY
REP STOSW
MOV WORD PTR @NUM,0
; 輸入的數據以穗團一個空格分隔,以回車符結束輸入
LEA DX,@STRA
MOV AH,10
INT 21H
MOV CL,@STRN
MOV CH,0
MOV WORD PTR @STRM,CX
LEA SI,@STR
CLD
LEA DI,@ARRAY
MOV WORD PTR @NUM,0
@STIN:
MOV AX,0
PUSH AX
MOV BYTE PTR @SIGNN,0
@AGAIN1:
CMP WORD PTR @STRM,0
JE @LINE0
LODSB
DEC WORD PTR @STRM
CMP AL,' '
JE @LINE0
CMP AL,'-'
JNE @INPUT1
MOV BYTE PTR @SIGNN,1
JMP @AGAIN1
@INPUT1:
SUB AL,30H
MOV AH,0
MOV BX,AX
POP AX
MOV CL,10
MOV CH,0
MUL CX
ADD AX,BX
PUSH AX
JMP @AGAIN1
@LINE0:
POP AX
CMP BYTE PTR @SIGNN,1
JNE @INPUT2
NEG AX
@INPUT2:
MOV WORD PTR[DI],AX
INC WORD PTR @NUM
CMP WORD PTR @STRM,0
JE @STINEND
INC DI
INC DI
JMP @STIN
@STINEND:
POPF
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
@STRA DB 255
@STRN DB ?
@STR DB 255 DUP(?)
@STRM DW 0
@ARRAY DW 100 DUP(0)
@NUM DW 0
@CHAR DB ?
@SIGNN DB 0
INPUTNUM ENDP
;=========================================
❹ 如何用匯編語言將一串數據中的正數放入以BUFFER為首地址數據緩沖區中
定義一個數據緩沖區
buff db n,?,n p(0)
其中n表示的是要輸入緩沖區的最大個數,?表示實際的個數鬧世(由系統來敬彎缺算)
然後比較緩沖區中的數和實際的輸入個數,
如果大於,則出現字元丟失並且響鈴
如果小於則填充亮辯零
然後在code segment 中定義相應的輸入中斷
即:
mov ah 10
mov dx, offset buff
int 21h
❺ 匯編語言內存中數據存放
22 低地址
11
44
33 高地址
每個dw的高地址團數存放高位數據,低伍念地址存放低位數據。
8086匯編中數據是存放在數據段的,所有從低地址到高地址的塌橘首存放。你在訪問3344H時可以直接用[num+2]來訪問。
需要區別的是windows的棧內存,是從高地址到低地址存放的。
❻ 求助!匯編語言如何將一個地址值存入寄存器
首先,MOV AL,buf
與 MOV AL,[buf] 沒有任何區別,都是將變搜梁量BUF的值送AL。(BUF必須是用DB定義的位元組變數)。
想將buf的地址值存入AL,這是不可能的橋漏畢,因為AL是8位,而地址是16位。
如果是想敏芹將buf的地址值存入AX,可用以下指令:
LEA AX,buf
或
MOV AX,OFFSET buf
❼ 用匯編語言實現從鍵盤讀一行信息,並存入用戶定義的緩沖區buffer。如從鍵盤輸入」myfriends」
data segment
buffer db 100,?,100 p(0)
data ends
code segment
assume cs:code,ds:data
begin:
mov ax,data
mov ds,ax
lea dx,buffer
mov ah,10
int 21h ;用dos的10號功能調用實現輸入一個字元串並存到內存緩沖襪梁慎告敬區
mov ax,4c00h
int 21h
code ends
end begin
匯編連接生成exe文件後,用debug載入運行。
運行結束後,用d命令渣凳查看數據段,
buffer開始的單元,第一個位元組是定義的緩沖區的大小,第二個位元組存放的是程序運行時輸入的字元個數,從第三個位元組開始才是輸入的字元串的ascii碼