.stack 8192
.data
mode dw ?
jmptbl dw l0,l1,l2,l3,l4,l5,l6,l7
prompt db 'press a numeric key [0..7]',13,10,36
errmsg db '枣闷Invalid keypress!$'
.code
main: mov ax,@data
mov ds,ax
mov dx,offset prompt
mov ah,9
int 21h
mov ah,1
int 21h
sub al,'0'
mov ah,0
mov mode,ax
mov bx,mode
cmp bx,7
ja illegal
add bx,bx
jmp jmptbl [bx]
illegal:
mov dx,offset errmsg
mov ah,9
int 21h
quit: mov ah,4ch
int 21h
l0: mov dl,'0'
jmp quit
l1: mov dl,'1'
jmp quit
l2: mov dl,'2'凳誉弯
jmp quit
l3: mov dl,'3'
jmp quit
l4: mov dl,'4'
jmp quit
l5: mov dl,'5'
jmp quit
l6: mov dl,'6'虚游
jmp quit
l7: mov dl,'7'
jmp quit
end main
datasegmentx db 5 x的值可以在运码这里更改,或者在debug中用e命令修改
y dw ?
dataends
codesegment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
xor ah,ah ah清零,目的是为了将字节扩展为字
mov al,x 取得数据x
cmp al,40 和40比较
jb next1 小于40转next1
jmp stop 大如野于等于40,就是x本身,直接转stop保存结果
next1: cmp al,20 小于40,渣悄喊则和20比较
jbe next2 小于等于20则转next2
add ax,ax 小于40并且大于20,x乘以2,相当于x+x,加法的执行效率比乘法高
jmp stop 转stop存结果
next2: xor al,al 小于等于20,将al清零
stop: mov y,ax 保存结果
mov ax,4c00h
int 21h
codeends
end start
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)