⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lab6_1.asm

📁 用宏和高级汇编技术实现类似高级语言中的条件分支语句IF功能。同时
💻 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 + -