㈠ 關於匯編程序問題
用匯編語言編程如下:
CODE SEGMENT
ASSUME CS:CODE
A DW 1357H ;隨意定義兩個數據.
B DW 2468H
START: MOV AX, CODE
MOV DS, AX
MOV AX, A ;---------開始處理.
TEST AX, 1
JNZ A_ODD ;為奇數轉移.
MOV BX, B
TEST BX, 1
JNZ AE_BO ;為奇數轉移.
ALL_E: SHR AX, 1 ;皆為偶數.
SHR BX, 1 ;除以2
XCHG AX, BX ;交換一下,再去交換存放.
JMP AE_BO
A_ODD: MOV BX, B
TEST BX, 1
JNZ AE_BO ;都為奇數?
JMP _END ;否則就是A奇B偶,不用處理了.
AE_BO: MOV B, AX ;要是B奇A偶,交換存放.
MOV A, BX
_END:MOV AX, 4C00H;-------處理完畢,是不是很簡短?
INT 21H
CODE ENDS
END START
本程序已經經過調試驗證,可以滿足題目要求。
結果,必須用DEBUG來查看。
用C語言編程就更簡單了。
㈡ 匯編程序問題
1 系統軟體:
是能提高程序設計者的工作效率、方便用戶使用、可以對計算機進行管理的軟體。
包括:操作系統、監控軟體、編譯程序、,匯編程序、資料庫、標准程序庫。
因此 很明確編譯程序,匯編程序屬於系統軟體。
2 只有為解決某一特殊問題而編寫的程序才能叫應用軟體。謝謝支持!
㈢ 匯編程序小問題
匯編十六進制的數如果是字母開頭,就得在數字前面加一個0,DB是定義一個位元組的數字,即值為A,即十進制是10,對應的ASCII碼是換行,即從新行開始顯示。
㈣ 匯編程序的問題
在dw行之後,mov bx,0之前
加入標號
start:
在end後添上標號,即改為end start
就你原來的程序,你能告訴我從哪裡開始執行嗎?(這就是錯誤根源),阿門。。。
編譯選項
ml /c file.asm
link16 file.obj
㈤ 匯編子程序的問題
你的子程序放的位置不對,修改如下:
DATAS SEGMENT
str1 db 'again$'
DATAS ENDS
STACKS SEGMENT
;此處輸入堆棧段代碼
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
main proc far
START:
MOV AX,DATAS
MOV DS,AX
call crlf
call crlf
call crlf
MOV AH,4CH
INT 21H
main endp
;====================
crlf proc near
mov ah,9
mov dx,offset str1
int 21h
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
ret
crlf endp
;==================
CODES ENDS
END START
㈥ 匯編語言問題
①mov ax,buffer是把以buffer為首地址的連續兩位元組的內容送入ax中。
[buffer]這個用法是錯誤的。[...]表示以地址"..."中的內容為偏移地址。
mov ax,400H,正確,是將400H送入AX中。
mov ax,[400H],錯誤,因為[n]本身並不能指明所用的段寄存器。匯編程序可能會錯誤地將[n]翻譯為立即定址情況下的立即數n。
②(...)表示地址"..."中的內容。
③CS:給出當前代碼段首地址
④25H是幾位,這個具體情況具體對待。
⑤mov DISP[BX+DI],DL,正確,DISP[BX+DI]採用基址加變址定址方式,BX+DI+DISP作為操作數的偏移地址。把DL中的內容送到DS段中以BX+DI+DISP為偏移地址的位元組單元中。
⑥mov DS:DISP[BP],1234H,正確,DS:DISP[BP]採用變址定址方式,BP+DISP作為操作數的偏移地址。由於BP默認的段寄存器是SS,而這里顯示是想把它放入數據段中,所以這里聲明段寄存器DS。把1234H送入DS段中以BP+DISP為偏移地址的字單元中。
mov Byte PTR[SI],40,寄存器間接定址。40為位元組時就是00101010,為字時就是0000000000101010,...
這都是很基本的概念,建議多看看書吧。(P.S. 沒書?買一本咯!)
㈦ 匯編程序問題
這個是三級匯編的試題。有個外部模塊io.obj,不過這個文件很難下載到本。
DX清零,是因為dx、ax是合起來作為除法源的,而不是只有ax
㈧ 匯編程序出錯
DSEG SEGMENT
ADR DW 5A62H, 3122H, 8C36H
FLAG DB 0FFH ;同為偶數FLAG置1,同為奇數置0,其餘情況置全1
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV BL, 2H
MOV AX, ADR
DIV BL
MOV BH, AH ;第一個余數
MOV AX, ADR + 2
DIV BL
ADD BH, AH ;兩個余數相加
MOV AX, ADR + 4
DIV BL
ADD BH, AH ;三個余數相加
;判斷三個余數之和:
CMP BH, 0 ;為零,就是三個偶數;
JZ QO
CMP BH, 3 ;為三,就是三個奇數;
JZ QJ
JMP OVER
QO:
MOV FLAG, 1H
JMP OVER
QJ:
MOV FLAG, 0H
OVER:
MOV AX, 4C00H
INT 21H
CSEG ENDS
END START
再試試看。
㈨ 問幾個關於匯編程序的問題
0000H和000BH是固定的,000BH是中斷入口地址
那個0100H應該是根據程序的長短來定的,要看你單片機的程序存儲器有多大,還有程序的前面要放多少東西了。7FF8H
這個是0809AD轉換器的地址,51單片機的P2口默認為十六位地址的高八位地址,要根據是不是有其它的外圍設備來定地址,如果沒接的話,可以隨便來定!!MOVX
@DPTR,A這句是用來啟動0809,不用知道A里放的是什麼東西,有這句的話0809就會被啟動了
HERE
SJMP
HERE
這句無限循環
應該是用來等待中斷的
end的話程序會被終止,中斷程序也不會再被執行了
LED那個你需要知道LED的結構很簡單,網上很容易找
硬體地址的分配是看你接的那幾根線了,原則上只要不重復應該都可以
有一些
是電路直接與單片機I/0口連接,而沒有經過AD轉換,請問什麼「情況下可以進行這樣的處理,也就是說,單片機I/0口可以接多大的電流或者電壓?」這句電壓的話一般是5V,但是那個AD不是因為電壓不匹配才接的,單片機要的是數字量,AD是將模擬兩轉換成數字量的!
㈩ 匯編程序執行問題
匯編程序都是順序執行,如果你想跳轉到一個其他位置,必須執行跳轉指令,否則就是按順序執行。匯編沒有返回指令,返回指令都是偽指令,編譯後都是跳轉指令。。。如果你想讓一個程序不按順序執行,在匯編里必須用到跳轉指令。。。。 C語言每個函數執行完後返回都是調用了跳轉指令。。。
在匯編里,CPU的操作時詳細到每一步,比如形參傳遞,必須將形參靠指令放入參數表,然後調用跳轉指令,完成函數調用,運算中自動變數出棧入棧都必須你親自考指令完成,而且必須要保存函數調用的返回地址,執行完後將函回值放到返回值位置,然後跳到這個地址,完成一次函數調用。。。。
當然上述過程是C語言的規則,如果是匯編程序你隨意,沒必要按照C語言的方式。。。