汇编代码(1)

;将数据段内的字母改成大写
		
		.MODEL SMALL
		.STACK 100H
		.DATA
	DB	'ibm     '
	DB	'win     '
	DB	'len     '
	DB	'hua     '
		.CODE
MAIN	PROC	FAR
		MOV AX,@DATA
		MOV DS,AX
		MOV	SI,0000H
		MOV CX,0003H
		MOV BX,0000H
		MOV DX,0004H
J:
		MOV AL,[BX+SI]
		AND AL,11011111B
		MOV [BX+SI],AL
		INC SI
		LOOP J
		ADD BX,0008H
		MOV CX,0003H
		MOV SI,0000H
		DEC DX
		JNZ J
		MOV AH,4CH
		INT 21H
MAIN	ENDP
		END	MAIN
		


		DOSSEG
		.MODEL	SMALL		; 设定8086汇编程序使用Small model
		.8086				; 设定采用8086汇编指令集

; 8255芯片端口地址 (Port number)分配:
PortA	EQU		90H			; Port A's port number in I/O space
PortB	EQU 	92H			; Port B's port number in I/O space
PortC	EQU 	94H			; Port C's port number in I/O space
CtrlPT	EQU 	96H			; 8255 Control Register's port number in I/O space

Patch_Protues	EQU		IN AL, 0	;	Simulation Patch for Proteus, please ignore this line



		.data					; 定义数据段;
		
DelayShort	dw	200

SEGTAB  DB 3FH	; 7-Segment Tube, 共阴极类型的7段数码管示意图
		DB 06H	;
		DB 5BH	;            a a a
		DB 4FH	;         f         b
		DB 66H	;         f         b
		DB 6DH	;         f         b
		DB 7DH	;            g g g 
		DB 07H	;         e         c
		DB 7FH	;         e         c
		DB 6FH	;         e         c
        DB 77H	;            d d d     h h h
		DB 7CH	; ----------------------------------
		DB 39H	;       b7 b6 b5 b4 b3 b2 b1 b0
		DB 5EH	;       DP  g  f  e  d  c  b  a
		DB 79H	;
		DB 71H	;



		.code						; Code segment definition
		.startup					; 定义汇编程序执行入口点
;------------------------------------------------------------------------
		Patch_Protues				; Simulation Patch for Proteus,
									; Please ignore the above code line.
;------------------------------------------------------------------------



		MOV AH,10001001B			;设置控制状态为C输入,AB输出(控制字不改变)
		SUB AL,AL
		OUT CtrlPT,AX	
		
L:		;开关处于ON为0,处于OFF为1
		IN AX,PortC					;读入开关状态
		NOT AX						;转换为合适的状态
		MOV AL,AH					;将需要的数据从AH移动到AL
		
		;沿用上一题代码的形式
		MOV BL,AL					
		AND BL,11110000B			;获取高四位数据
		SUB BH,BH
		MOV CL,4					;8086指令中只支持ROR BL,1或者ROR BL,CL格式
		ROR BX,CL
		MOV SI,OFFSET SEGTAB		
		SUB BH,BH
		ADD SI,BX
		MOV AH,[SI]					
		MOV DH,AH					;DH中存储着输入数据高四位对应的显示
		
		SUB BL,BL					;BL清零
		MOV BL,AL
		AND BL,00001111B			
		MOV DI,OFFSET SEGTAB
		SUB BH,BH
		ADD DI,BX
		MOV DL,[DI]					;DL 中存储着输入数据低4位对应的显示	
								
		AND AL,11110000B	
		MOV BH,AL					;BH中存储着输入8位数据的高四位状态
		
		;第四位和第二位显示
		MOV AH,BH
		ADD AH,00001010B
		
		OUT PortA,AX
		MOV AH,DH
		OUT PortB,AX
		CALL DELAY
		
		;第三位和第一位显示
		MOV AH,BH
		ADD AH,00000101B
		OUT PortA,AX
		MOV AH,DL
		OUT PortB,AX
		CALL DELAY
		
		JMP L
		
RET

DELAY 	PROC
    	PUSH CX
    	MOV CX,DelayShort
D1: 	LOOP D1
    	POP CX
    	RET
DELAY 	ENDP

		.stack 100h				; 定义256字节容量的堆栈


		END						;指示汇编程序
结束编译


;将welcome to masm!复制到相邻的内存空间中
		assume: ds:data,cs:code
		
		data segment
		db 'welcome to masm!'
		db '                '
		data ends
		
		code segment
	start:
		mov ax,data
		mov ds,ax
		mov si,0
		mov di,16
		mov cx,16
	j:	
		mov al,[si]
		mov [di],al
		inc si
		inc di
		loop j
		
		mov ah,4ch
		int 21h
	code ends
	
	end start



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值