1.已定义A、B、C,从键盘输入两位十六进制数A,将A和 B中较大的数保存到C并输出,输入允许大小写字母,输出用大写字母。
.DATA
A DB ?
B DB 88H
C DB ?
assume cs:code,ds:data
data segment
A db 0
B db 88h
C db 0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov cx,2
mov bx,0
s:mov ah,1 ;循环输入两个字符,代表两位十六进制数
int 21h
mov ah,al
call change ;通过change子程序将输入的字符转换成十进制数保存在al中
cmp cx,1
je mk
mov al,16 ;将高位乘以16放入A中
mul ah
add byte ptr ds:[bx],ax
jmp short k
mk: add byte ptr ds:[bx],ah ;低位直接加进A中
k: loop s
mov bx,0 ;比较A和B中的数的大小,将大的赋值给C
mov al,[bx]
cmp al,[bx+1]
jc next
mov [bx+2],al
jmp short last
next:mov al,[bx+1]
mov [bx+2],al
last:
mov al,[bx+2] ;last这儿的两步将al中的高4位以字符形式输出
and al,11110000b
mov cl,4
ror al,cl
call change1 ;change1这个子程序的作用是把十六进制数转换成相应字符的ascii码
mov ah,2
mov dl,al
int 21h
mov al,[bx+2]
and al,00001111b
call change1
mov ah,2
mov dl,al
int 21h
change:
sub dx,dx
cmp ah,58
jc x
sub dx,dx
cmp ah,71
jc y
sub dx,dx
cmp ah,103
jc z
ok:ret
x:sub ah,30h
jmp ok
y:sub ah,37h
jmp ok
z:sub ah,57h
jmp ok
change1:
sub dx,dx
cmp al,10
jc x1
add al,37h
jmp short ok1
x1:
add al,30h
ok1:ret
mov ax,4c00h
int 21h
code ends
end start
2.已定义四位数字年份,判断是否是闰年,是则输出y,不是输出n。
.DATA
YEAR DB ‘1975’
assume ds:data,cs:code,ss:stack
data segment
year db '2004'
year1 dw 0
return db 'yn'
data ends
stack segment
db 64h dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
call change
call pan
mov ax,4c00h
int 21h
change:
push bx