📄 lab6_1.asm
字号:
spointer=0
flag=0
counter=0
spflag=0
connect macro x1,x2,x3,x4,x5 ;;用于连接参数组成的字符串,根据第三个参数是否设置分为两种
ifb <x3>
&x1&x2 &x4&x5
else
&x1&x2&x3&x4&x5
endif
endm
labeling macro top ;;产生标号,以label_开头,如label_5:
connect label_,top,:,
endm
st_asign macro top,value
connect,s&top,=,value,, ;s1=1,s2=0...
endm
f_asign macro top,value
connect,f&top,=,value,, ;f1=1,f2=2...
endm
st_push macro
spointer=spointer+1
counter = counter+1
st_asign %spointer,%counter
endm
st_pop macro
spointer=spointer-1
endm
flag_push macro
flag=0
spflag=spflag+1
f_asign %spflag,%flag
endm
flag_pop macro
spflag=spflag-1
endm
iff macro x1,op,x2
local next
flag_push
st_push ; spointer=n+1,counter=m+1,s_n+1=m+1
st_push ; spointer=n+2,counter=m+2,s_n+2=m+2
sptmp=spointer-1 ; sptmp=n+2-1=n+1
connect sptmp,=,s,%sptmp;;sptmp=s_n+1=m+1
cmp x1,x2
connect j,op,,next ; jop next
connect j,mp,,label_,%(sptmp) ;jmp label_m+1
next:
endm
elsee macro
spflagtmp = spflag
connect spflagtmp,=,f,%spflagtmp
spflagtmp = 1
connect f,%spflag,=,%spflagtmp
sptmp=spointer
connect sptmp,=,s,%sptmp;;sptmp=s_n+2=m+2
connect j,mp,,label_,%(sptmp) ;jmp label_m+2
sptmp=spointer-1
connect sptmp,=,s,%sptmp;;sptmp=s_n+1=m+1
Labeling %sptmp ;; -> label_m+1:
endm
ifend macro
spflagtmp = spflag
connect spflagtmp,=,f,%spflagtmp
sptmp=spointer+spflagtmp-1
connect sptmp,=,s,%sptmp;;sptmp=s_n+1+flag=m+1+flag
Labeling %sptmp ;; -> label_m+1+flag:
flag_pop
st_pop ;spointer=n+1
st_pop ;spointer=n
endm
data segment
meg1 db 'cx>=1!',0ah,0dh,'$'
meg2 db 'cx>6!',0ah,0dh,'$'
meg3 db 'cx<=6!',0ah,0dh,'$'
meg4 db 'cx>=3!',0ah,0dh,'$'
meg5 db 'cx<3!',0ah,0dh,'$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov cx,5
iff cx,ge,1
mov dx,offset meg1
mov ah,09h
int 21h
iff cx,g,6
mov dx,offset meg2
mov ah,09h
int 21h
elsee
mov dx,offset meg3
mov ah,09h
int 21h
ifend
iff cx,ge,3
mov dx,offset meg4
mov ah,09h
int 21h
elsee
mov dx,offset meg5
mov ah,09h
int 21h
ifend
ifend
mov ax,4c00h
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -