1樓:義瓔
呼叫mov ah 01
int 21;輸入
mov ah 09
int 21;顯示
2樓:
我來試著回答下:
先用文字敘述下有關的硬體及控制埠
硬體:89c52,2個led數碼管,二極體、電阻看電路選擇。
埠:p1資料輸出,p0口控制led管的控制端。
org 00h
sjmp main
org 30h
main:
mov dptr,#100h
mov r0,#30h;資料緩衝區首地址
mov a,@r0 ;將得到的數送a
movc a,@a+dptr
mov p1,a
mov p0,#01h ;亮第一個ledinc r0
mov a,@r0
movc a,@a+dptr
mov p1,a
mov p0,#03h;全部點亮
sjmp $
org 100h
db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h
db 41h,42h,43h,44h,45h,46hend
3樓:匿名使用者
先說明系統呼叫
在dos下int 21h就可以
在windows下要呼叫建立視窗系統呼叫
把引數入棧
在呼叫相應的系統呼叫
無系統的情況下要寫視訊記憶體或呼叫bios的中斷
4樓:空白碼
data segment;資料段
da db ?,?,?;存放ffh三個字元的ascii碼值dr db 0dh,0ah,'$';用於換行data ends
stack segment para stack'stack';堆疊段
db 50 dup(?)
stack ends
code segment
assume cs:code,ds:datastart:mov ax,data
mov ds,ax
mov ah,01h
int 21h
mov da[0],al;接收第一個f
mov ah,01h
int 21h
mov da[1],al
mov ah,01h
int 21h
mov da[2],al
mov dx,offset dr
mov ah,9
int 21h ;輸出回車換行符mov dl,da[0];輸出第一個輸入的字元mov ah,02h
int 21h
mov dl,da[1]
mov ah,02h
int 21h
mov ah,01h;螢幕停留
int 21h
code ends
end start
我除錯過了,可以執行的,有問題的話應該是中英文符號的問題,詳見dos功能呼叫表.
從鍵盤輸入一個2位無符號的16進位制數,00h~ffh,然後在顯示器上同時以2進位制和16進位制顯示出來 用組合語言寫
5樓:熊滔
編語言寫
;類似的題目有許多種做法,這次換了種方法...
;用masm 5.0 編譯通過。(ctrl+c結束);執行結果示範如下:
;aa ====>>> 10101010
;bb ====>>> 10111011
;cc ====>>> 11001100
;dd ====>>> 11011101
;ee ====>>> 11101110
;ff ====>>> 11111111
;af ====>>> 10101111
;^cdata segment
crlf db 0dh,0ah,'$' ;輸出回車換行f1 db 0 ;定義輸入的數字位數標誌,為0表示輸入的是個位temp db 0 ;輸入的數
mess1 db ' ====>>> $'
s1 db '0123456789abcdefabcdef'
ll equ $-s1
data ends
code segment
assume cs:code, ds:datamain proc far
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
push ds
pop es
;-------------------------ini: ;初始化
mov al,0
mov f1,al
mov temp,al
n1: ;輸入字元起始位
mov ah,8
int 21h
cmp al,0dh ;是回車符則輸出結果jnz goon
mov bl,temp
jmp output
goon:
call c_1 ;檢測輸入字元是否合法
jnz n1 ;不合法,直接重新輸入
push ax ;顯示輸入的字元
mov dl,al
mov ah,2
int 21h
pop ax
cmp al,'a' ;以下將輸入的字元轉換成數字jb be1a
sub al,'a'-10
jmp nn1
be1a:
cmp al,'a'
jb be1
sub al,'a'-10
jmp nn1
be1:
sub al,'0'
nn1:
mov bl,f1 ;檢測輸入的是1位還是2位cmp bl,0
jnz w2
mov temp,al ;是1位
inc f1 ;置1位標誌
jmp n1 ;跳轉輸入下一個數位
w2: ;輸入的是第2位數
mov bl,temp ;將上一位輸入的數乘以10h(左移4位),再加上這次輸入的數
mov cl,4
shl bl,cl
add bl,al
output: ;將數字輸出提示資訊,'====>>>'
mov ah,9
mov dx,offset mess1
int 21h
mov cl,8 ;設定迴圈次數
disp_n:
rol bl,1 ;左移一位
jc dd1
mov dl,'0' ;無進位顯示0
jmp disp
dd1:
mov dl,'1' ;有進位顯示1
disp:
mov ah,2
int 21h
loop disp_n
mov ah,9
mov dx,offset crlf ;輸出一個回車換行int 21h
jmp ini ;跳轉輸入下一個數
main endp
;***************===
c_1 proc near ;檢測輸入的字元是否合法子程式mov di,offset s1
mov cx,ll
repnz scasb
ret;返回:nz=輸入的值不在表內 zr=輸入的值在表內c_1 endp
;**********=
code ends
end start
6樓:匿名使用者
你是哪位~~~謝謝你哈,今天我們也在做這個實驗~~~~悠嘻
如何學習組合語言,學習組合語言需要如何入門?
學習組合語言過程 一,要有一定的微機硬體基礎知識,因為彙編很底層,更加接近機器語言,往往很多的東西要從機器層面來支援理解。二,最好先學習一門高階語言,因為高階語言更接近人的語言,相對比較容易理解。掌握了一門高階語言後再學彙編,一來不易產生畏懼感,二來遇到問題,只能侷限於已學的彙編知識來來思考遇到的問...
試編寫組合語言源程式,將鍵盤輸入的ASCII碼轉換為二進位制
將鍵盤輸入的ascii碼轉換為二進位制。直接回車程式結束。檔案格式 code segment main proc far assume cs code,ds code 100h start push cs pop ds nn1 mov ah,02 mov dl,0dh int 21h mov dl,...
組合語言 底下的程式顯示cmp,0和test不正確為什麼啊這不是間接定址嗎
已經改過了,si 是暫存器間接定址,但是無變數名的暫存器變數定址屬於無型別量,後面的立即數也是無型別量,所以不符合語法規則,使用ptr偽指令即可修改。還有x屬於位元組型變數,所以不要和8000h比,和80h比就夠了,你不就是想驗證一下零的最高位是一還是零嗎?data segment x db 9,4...