組合語言如何輸入ffh螢幕顯示ff

2021-04-22 10:03:09 字數 3854 閱讀 6931

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...