prognam segment ;define code segment
main proc far
assume cs:program
start: ;starting execution addr
;set up stack for return
push ds ;save old data segment
sub ax,ax ;put zero in AX
push ax ;save zero on stack
;main part of program
move ch,4 ;number of digits
rotate: move cl,4 ;set count to 4 bits
rol bx,cl ;left digit to right
mov al,bl ;move to AL
add al,0fh ;mask off left digit
add al,30h ;conver hex to ASCII
cmp al,3ah ;is it > 9 ?
jl printit ;jump if digit = 0 to 9
add al,7h ;digit is A to F
printit:
mov dl,al ;put ASCII char in DL
mov ah,2 ;display output funct
int 21h ;call DOS
dec ch ;done 4 digits?
jnz rotate ;not yet
ret ;return to DOS
main endp ;end of main part of prog.
prognam ends ;end of segment
end ;end of assembly
;*************************************
datarea segment
addr dw number
number dw Y
count dw ?
datarea ends
;*************************************
prognam segment
;-------------------------------------
main proc far
assume cs:prognam,ds:datarea
start:
;set up stack for return
push ds
sub ax,ax
push ax
;set DS register to current data segment
mov ax,datarea
mov ds,ax
;MAIN PART OF PROGRAM GOES HERE
mov cx,0
mov bx,addr
mov ax,[bx]
repeat: test ax,0ffffh
jz exit
jns shift
inc cx
shift: shl ax,l
jmp repeat
exit: mov count,cx
ret
main endp
;-------------------------------------
prognam ends
;*************************************
end start
方法二
MOV CX, 16
MOV BX, 0
Begin: SHL AX, 1
JNC Next
INC BX
Next: LOOP Begin
方法三
MOV CX,16
MOV BX,0
MOV DX,1
AG: TEST AX,DX
JZ NEXT
INC BX
NEXT: SHL DX,1
LOOP AG
;********************************************
datarea segment
buffer db 80 dup(?)
flag db ?
datarea ends
;********************************************
prognam segment
;--------------------------------------------
main proc far
assume cs:prognam,ds:datarea
start:
;set up stack for return
push ds
sub ax,ax
push ax
;set DS register to current data segment
mov ax,datarea
mov ds,ax
;MAIN PART OF PROGRAM GOES HERE
lea bx,buffer
mov flag,0
next: mov ah,01
int 21h
test flag,01h
jnz follow
cmp al,20h
jnz exit
mov flag,1
jmp next
follow: cmp al,20h
jz exit
mov [bx],al
inc bx
jmp next
exit: ret
main endp
;---------------------------------------------
prognam ends
;*********************************************
end start