1.已定义四位年份,判断是否是闰年,是则输出y,不是输出n。
.model small,c
.stack 200h
.data
res db ?
year dw 2000h
mod4 dw ?
mod100 dw ?
mod400 dw ?
;这些类型的余数必须是dw和year类型匹配
.code
.startup
mov dx,0
mov ax,year;对于字类型,div后面的是除数,被除数默认在DX:AX中,商在AX中,余数在DX中
mov cx,4
div cx;这里不能直接除以4,而是要用寄存器来运算
mov mod4,dx
mov dx,0
mov ax,year
mov cx,100
div cx
mov mod100,dx
mov dx,0
mov ax,year
mov cx,400
div cx
mov mod400,dx
.if(mod4==0&&mod100!=0)||mod400==0
mov res,'Y';'Y'的十六进制是59
.else
mov res,'N' ;'N'的十六进制是4E
.endif
mov al,res
;最终al的值是4E
.exit
end
2.已知数据段,在BUF定义了10个无符号字节数。试编写程序将数组中最大值找出来存放到MAX。
.model small,c
.stack 100h
.data
buf db 10H,34H,55H,98H,20H,35H,76H,15H,0AH,65H
max db ?
buflen equ lengthof buf
.code
.startup
mov bx,0
mov al,buf[bx];获取数组第一个元素
inc bx
.while bx<buflen
.if buf[bx]>al
mov al,buf[bx]
.endif
inc bx
.endw
mov max,al
;最终结果就是98h
.exit
end
3.已知数据段中定义了BUF和NUM,其中BUF定义了一个以'$'作结束标志的字符串。编写程序:统计该字符串中数字字符的个数,保存在NUM。
.model small,c
.stack 200h
.data
buf db '12AcxyCDE45','$'
num db 0
.code
.startup
mov bx,0
.while buf[bx]!='$'
.if buf[bx]>='0'&&buf[bx]<='9'
inc num
.endif
inc bx
.endw
mov al,num
;结果为4
.exit
end
4. 编程将数据段中存放的字节无符号整型数组从小到大排序。
.model small,c
.stack 200h
.data
buf db 10h,30h,88h,05h,66h,45h,9h,32h,80h,70h
buflen equ lengthof buf
.code
.startup
mov di,0
.while di<buflen
mov si,1
add si,di
.while si<buflen
mov bl,buf[si]
mov cl,buf[di]
;这里不能使用ax和dx作为数组索引了,只能使用si和di这类索引寄存器
.if cl>bl
mov buf[si],cl
mov buf[di],bl
.endif
inc si
.endw
inc di
.endw
mov si,buflen-1
mov di,0
mov al,buf[si]
mov bl,buf[di]
.exit
end