求彙編程式 從鍵盤上輸入十六進位制數,將其轉換成十進位制數並

2021-04-18 12:49:39 字數 8342 閱讀 3822

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