汇编画脉冲波形图

以十进制数形式从键盘输入脉冲高度、脉冲宽度和颜色参数后,以屏幕中间行为脉冲中间行,从左到右、满屏画出相应的脉冲波图形。

DATAS SEGMENT
    ;此处输入数据段代码 
    Prompt_Str1 db  'Please input hight: $' ;提示输入脉冲高度
	Prompt_Str2 db  'Please input width: $' ;提示输入脉冲宽度
	Prompt_Str3 db  'Please input line colour: $' ;提示输入波线颜色
	Hight_Pulse dw  ? ;脉冲高度
	Width_Pulse dw  ? ;脉冲宽度
	Colou_Pulse db  ? ;波线颜色 
	result dw ?
	XU DW ?           ;画线的参考坐标
	YU DW ?
	XU1 DW ?
	YU1 DW ?
DATAS ENDS
STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
	  
	Output MACRO Str_Addr
	   lea  dx,Str_Addr
	   mov  ah,9
	   int  21h
   	EndM 
   	
   	Shu PROC NEAR
		PUSH AX
   		PUSH BX
   		PUSH CX
		PUSH DX
	    ;竖线
	    mov cx,XU1           ;X坐标
	    mov bx,YU1          ;终止y坐标
	    mov dx,YU           ;Y坐标
	    ;int 10h
	    pshu:
	        mov al,Colou_Pulse    ;淡红色
	        mov ah,0ch      ;写入点像
	        inc dx
	        cmp dx,bx
	        int 10h
	    jne pshu
	 	POP DX
		POP CX
		POP BX
		POP AX
	ret
	Shu EndP
   	
   	
   	Hen PROC NEAR
   		PUSH BX
   		PUSH CX
		PUSH DX
	    ;横线            
	    mov cx,XU           ; x坐标
	    mov bx,XU1          ; 终点x坐标
	    mov dx,AX           ; y坐标
	    ;int 10h
	    pheng:
	        mov al,Colou_Pulse     ; 淡红色
	        mov ah,0ch             ;写入点像
	        inc cx
	        cmp cx,bx
	        int 10h
	    jne pheng
	   POP DX
	   POP CX
	   POP BX
	   ret
    Hen EndP
    
    ; 回车换行
	Enter_CTLF proc Near
	   push  ax 
	   push  dx
	   mov  ah,02h
	   mov  dl,0dh 
	   int  21h
	   mov  dl,0ah
	   int  21h 
	   pop  dx
	   pop  ax
	   ret
	Enter_CTLF endp 

	; 输入十进制数化为2进制存在result中
	Input_Digit PROC NEAR 
		push BX
		push AX
		PUSH CX      
	    MOV  BX,0          
	REP1: MOV  AH,1           
	    INT  21H  
	    SUB  AL,30H
	    JL  EXIT          
	    CMP  AL,9       
	    JG  EXIT       
	    CBW
	    XCHG  AX,BX
	    MOV  CX,10
	    MUL  CX
	    ADD  BX,AX   
	    JMP  REP1
	EXIT: 
		MOV result,BX
		POP CX
		POP AX
		POP BX
		RET
	Input_Digit  ENDP

START:
    MOV AX,DATAS
    MOV DS,AX
    
  rep1:
	Output Prompt_Str1      ;提示输入脉冲高度
   	call Input_Digit        ;键盘输入一个3位的十进制数字,将其转换成二进制数并保存在指定的内存单元
   	MOV AX,result
   	CMP AX,200
   	JA rep1
   	MOV Hight_Pulse,AX
   	call Enter_CTLF 		;输出一个回车、换行
   	
   	Output Prompt_Str2 		;提示输入脉冲宽度
   	call Input_Digit
   	MOV AX,result
   	MOV Width_Pulse,AX
   	call Enter_CTLF 		;输出一个回车、换行
   	
   	Output Prompt_Str3 		;提示输入波线颜色
   	call Input_Digit
    MOV AL,byte Ptr result
    MOV Colou_Pulse,AL
    
	;先设置屏幕显示模式(640*480*16),再采用描点画图,通过INT10中断来描点画
	MOV AH,0
	MOV AL,13H  
	INT 10H
	
	MOV XU,0                ; 画中心线
	MOV XU1,320
	MOV AX,100
	CALL Hen
	
	;xu,xu1,yu,yu1相当于当前画的位置
	;下面是初始位置
	;XU = 0
	;XU1 = Width_Pulse
	;YU = 100-Width_Pulse/2
	;YU1 = YU+Width_Pulse
	MOV XU,0                
	
	MOV AX,Width_Pulse      
	MOV XU1,AX

	MOV AX,Hight_Pulse
	MOV BX,2 
	DIV BX
	MOV CX,100
	SUB CX,AX
	MOV YU,CX
	
	MOV AX,YU
	ADD AX,Hight_Pulse
	MOV YU1,AX
	
	mov cx,YU1               ;  用于横线位置的上下交替
	mov dx,YU
	again:
	    MOV AX,CX
		call Hen	
		CALL Shu
		MOV AX,XU1          ; 画横线的起点横坐标等于终点横坐标
		MOV XU,AX
		
		ADD AX,Width_Pulse  ; 横线的终点横坐标加上宽度
		MOV XU1,AX
		
		XCHG cx,dx          ;  用于横线位置的上下交替
		CMP XU1,320         ; 判断终点横坐标是否大于边界
		JBE again           ; 没有超界则继续画图
	
	MOV XU1,320             ; 超界则将终点坐标设为边界横坐标
	MOV AX,CX               
	CALL Hen

   	;MOV AH,4CH
    ;INT 21H
CODES ENDS
    END START

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值