1樓:匿名使用者
assume cs:code, ds:datasdatas segment
hex db 4 dup (0)
error db 13,10,'input error$'
datas ends
code segment
start:
mov ax, datas
mov ds, ax
mov ah, 1h
mov bx, offset hex
jmp ts0
up0:
inc bx
ts0:
cmp bx, offset hex + 4jge next0
int 21h
mov byte ptr [bx], aljmp up0
next0:
mov cl, 4
mov bx, offset hex
xor dx, dx
jmp ts1
up1:
inc bx
ts1:
cmp bx, offset hex + 4jge blank
mov al, byte ptr [bx]cmp al, '0'
jl err
cmp al, '9'
jle below_ten
cmp al, 'a'
jl err
cmp al, 'f'
jle above_ten
cmp al, 'a'
jl err
cmp al, 'f'
jg err
above_ten:
and al, 0fh
add al, 9
below_ten:
and al, 0fh
shl dx, cl
add dl, al
jmp up1
blank:
mov bx, dx
mov ah, 2h
mov dl, 13
int 21h
sub dl, 3
int 21h
xor cx, cx
mov ah, 2h
stcnext1:
rcr cx, 1
jc done
test bx, cx
jnz ones
mov dl, '0'
int 21h
jmp next1
ones:
mov dl, '1'
int 21h
jmp next1
err:
mov ah, 9h
mov dx, offset error
int 21h
done:
mov ax, 4c00h
int 21h
code ends
end start
使用組合語言,從鍵盤上輸入0-65535之間的十進位制數,將其轉換成十六進位制數,並在螢幕上顯示出
2樓:匿名使用者
;輸入不超過65535的10進位制數,將其以16位的形式顯示code segment
assume cs:code
org 100h
start:
jmp bbb
x dw 0
msg1 db 10,13,'please input a number:','$'
msg2 db 10,13,' ','$'
bbb:
push cs
pop ds
lea dx,msg1
mov ah,9
int 21h
lea bx,x
mov ax,0
push ax
again1:
mov ah,1
int 21h
cmp al,13
je line0
sub al,30h
mov ah,0
mov si,ax
pop ax
mov cl,10
mov ch,0
mul cx
add ax,si
push ax
jmp again1
line0:
pop ax
mov word ptr[x],ax
lea di,msg2
inc di
inc di
mov cx,4
again2:
mov ax,word ptr[x]
rol ax,1
rol ax,1
rol ax,1
rol ax,1
; rol ax,4
mov word ptr[x],ax
and ax,000fh
cmp al,9
jg line1
add al,30h
mov byte ptr[di],al
jmp line2
line1:
add al,37h
mov byte ptr[di],al
line2:
inc di
loop again2
lea dx,msg2
mov ah,9
int 21h
mov ah,8
int 21h
mov ah,4ch
int 21h
code ends
end start
3樓:匿名使用者
沒太明白。
一般情況下,輸入完資料後,按回車,結束輸入。
你這按下esc鍵,是當什麼情況下按下?
難道是:比方說,輸入12,這時按下esc,螢幕上輸出ok?
下面是不考慮按esc情況的程式。
;read a decimal number, print it hex
dseg segment
n dw 0
f db 0
t db '0123456789abcdef'
msg0 db 'please input decimal number between 0-65535:$'
msg1 db 'conversion result is:$'
msg2 db 0dh,0ah,'input error!',0dh,0ah,'$'
dseg ends
cseg segment
assume cs:cseg, ds:dsegstart:
mov ax, dseg
mov ds, ax
lea dx, msg0
mov ah,9
int 21h
lea si, n
call read10
cmp f,1
je ex0
lea dx, msg1
mov ah,9
int 21h
mov ax,n
call print
ex0:
mov ah,4ch
int 21h
;read a decimal number;store it in [si]
;end flag: char not in '0'-'9'
;readflag f:0-success, 1:errorread10 proc near
xor dx,dx
mov bx,10
rd0:
mov ah,1
int 21h
cmp al,'0'
jb rt0
cmp al,'9'
ja rt0
and ax,0fh
xchg ax,[si]
mul bx
add ax,[si]
jc re0
xchg ax,[si]
jmp rd0
re0:
mov f,1
lea dx,msg2
mov ah,9
int 21h
rt0:
retread10 endp
;print (ax) in hex
print proc near
mov bx,16
xor cx,cx
q0:xor dx,dx
div bx
or dx,0e00h
push dx
inc cx
cmp ax,0
jnz q0
lea bx,t
q1:pop ax
xlat
int 10h
loop q1
mov al,'h'
int 10h
retprint endp
cseg ends
end start
如何用51微控制器組合語言編寫一個將十六進位制數轉換成十進位制數,並在七段數碼管上顯示出來的程式
4樓:匿名使用者
keyval equ 30h
dat equ 33h
scanled equ 39h
org 0000h
ljmp main
org 001bh
ljmp t1isr ;掃描顯示
org 0030h
main:
mov sp,#5fh
mov tmod,#10h
mov th1,#0ech
mov tl1,#078h
mov 33h,#10h
mov 34h,#10h
mov 35h,#10h
mov 36h,#10h
setb tr1
setb et1
setb ea
mov keyval,50h
loop:
lcall datchg
jb p1.0,loop1
jnb p1.0,$
inc keyval
sjmp loop
loop1:
jb p1.1,loop
jnb p1.1,$
mov a,keyval
dec a
mov keyval,a
sjmp loop
t1isr:
push acc
clr tr1
mov th1,#0ech
mov tl1,#78h
setb tr1
mov dptr,#ledtab
t100:
mov r0,#dat
mov a,scanled
add a,r0
mov r0,a
mov a,scanled
jnz t101
mov p2,#01h
sjmp t1dis
t101:
dec a
jnz t102
mov p2,#02h
sjmp t1dis
t102:
dec a
jnz t103
mov p2,#04h
sjmp t1dis
t103:
mov p2,#08h
t1dis:
mov a,@r0
movc a,@a+dptr
mov p0,a
inc scanled
mov a,scanled
cjne a,#4,t1end
mov scanled,#0
t1end:
pop acc
reti
datchg:
mov a,keyval
mov b,#100
div ab
mov 34h,a
xch a,b
mov b,#10
div ab
mov 35h,a
mov 36h,b
retledtab: ; 共陰極數碼管顯示**表db 3fh,06h,5bh,4fh,66h ;01234db 6dh,7dh,07h,7fh,6fh ;56789end
如何用組合語言編寫:從鍵盤上輸入一個十六進位制數,將其轉換成一個十進位制數顯示。
5樓:匿名使用者
data segment
data1 db ?
data2 db 2 dup(?)
data20 db 2 dup(?)
data3 db 'input error, please enter again!','$'
data ends
stack segment
db 5 dup(?)
stack ends
code segment
assume cs:code, ds:data,ss:stackstart:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov bx,0
input:mov ah,01h
int 21h
cmp al,51h;判斷輸入的字元是否為qje exit
;如果是q就退出
cmp al,71h;判斷輸入的字元是否為qje exit
;如果是q就退出
push ax
;把從鍵盤輸入的字元的ascii存到堆疊段sub al,30h ;判斷是否為數字
cmp al,00h
jl indi ;如果不是就提示錯誤
cmp al,09h ;
mov bl,al ;
jle output2;如果是數字就輸出
pop ax ;把al的值取出來
push ax ;
mov bl,al
sub al,41h;判斷是否為大寫字母a到fcmp al,00h
jl indi
;如果不是就提示錯誤
cmp al,06h
jl change
pop ax
push ax
mov bl,al
sub al,61h;判斷是否為小寫字母a到fcmp al,00h
jl indi ;如果不是就提示錯誤
cmp al,06h
jl change
pop ax
jmp indi
change:mov si,0
mov di,0
mov cl,4
mov al,bl
and al,11011111b;統一換為大寫字母再轉換,如果是大寫字母就不變
sub al,31h
mov bl,al
and al,0fh ;與運算,取低位
mov [data2+si],al ;把個位數存到data2中mov al,bl
sar al,cl ;算術右移,取高位
mov[data20+di],al;把十位數存到data20中output1: mov dl,48h;輸出十六進位制符號hmov ah,02h
int 21h
mov dl,3dh ;輸出等號『=』
mov ah,02h
int 21h
mov dl,[data20+di];輸出十位數add dl,30h
mov ah,02h
int 21h
mov dl,[data2+si];輸出個位數add dl,30h
mov ah,02h
int 21h
mov dl,20h
mov ah,02h
int 21h
jmp input;跳到輸入數字
output2: mov dl,48h ;輸出數字mov ah,02h
int 21h
mov dl,3dh
mov ah,02h
int 21h
mov dl,bl
add dl,30h
mov ah,02h
int 21h
mov dl,20h
mov ah,02h
int 21h
jmp input
indi:mov dl,20h ;提示子程式mov ah,02h
int 21h
mov dx,offset data3 ;顯示提示資訊mov ah,09h
int 21h
jmp input
exit:mov ah,4ch
int 21h
code ends
end start
彙編程式 接受鍵盤輸入字元,若輸入為字母,則顯示 L ,若為數字,則顯示 D ,其他的則顯示 O
直接寫主程式哈 start mov ah,1 int 21h cmp al,30h jb other cmp al,39h ja next num1 mov dl,d mov ah,2 int 21h jmp exit next cmp al,41h jb other cmp al,z jb chr...
幫忙寫彙編程式,要求從鍵盤輸入的字串(以回車結束),並將字串末尾加上結束標誌然後
因為你輸出的字串是 80,lea dx,buffer int 21h 把它改為 lea dx,buffer 2 int 21h 你的程式有兩個錯誤 1。呼叫mov ah,0ah int21h 後dx指向的是緩衝區的開始,不是結尾,因此你加 的位置應該是 緩衝區開始地址 2 輸入位元組數 2。顯示時,...
c 程式設計,急求大神使用者從鍵盤上任意輸入整數
include define n 10 define invalid 0xffffusing namespace std int main int argc,char argv if istrigger elsereturn true include using namespace std int ...