汇编实验(三)

<span style="font-family: Arial, Helvetica, sans-serif;"><循环程序设计></span>
1.如何输出自定义变量
2.21H中断 1号输入 2号输出  (一个字符)
 
data segment
	man db 0
	woman db 0
	COUNT equ 10
	disp db 0dh, 0ah, 'man or woman 1/0?', '$'
	disp1 db 0dh, 0ah, 'man:', '$'
	disp2 db 0dh, 0ah, 'woman:', '$'
data ends

code segment
	assume cs:code, ds:data 
start:
	mov ax, data 
	mov ds, ax 
	mov cx, COUNT
	
input:
	mov dx, offset disp 
	mov ah, 9
	int 21h 
	mov ah, 1
	int 21h 
	
	cmp al, '1'
	jz mancount
	cmp al, '0'
	jz womancount
	jmp input 
	
mancount:
	inc man 
	jmp loopnext 
	
womancount:
	inc woman
loopnext:
	loop input
	
	mov dx, offset disp1
	mov ah, 9
	int 21h 
	
	mov bx, offset man 
	mov dl, [bx]
	cmp dl, 10
	jb hehe 
	add dl, 7
hehe:
	add dl, 30h
	
	mov ah, 2 
	int 21h 
	 
	mov dx, offset disp2
	mov ah, 9
	int 21h
	
	mov bx, offset woman
	mov dl, [bx]
	cmp dl, 10
	jb haha 
	add dl, 7
haha:
	add dl, 30h 
	mov ah, 2 
	int 21h 


	mov ah,1
	int 21h

	mov ah, 4ch 
	int 21h 
code ends 
end start 

/*矩阵相乘
 *
 */

assume cs:code, ds:data, ss:stack
data segment
	s1 db 255, 2, 26, 251, 2, 1, 3, 4, 6, 5, 8, 9, 8, 2, 5, 7
	s2 db 224, 2, 7, 4
	re dw 4 dup(0)
	temp dw 0 
	temp1 dw 0 
data ends
stack segment
	dw 15 dup(0)
stack ends 
code segment
start:
	mov ax, data
	mov ds, ax

	mov ax, stack
	mov ss, ax 
	mov sp, 0010h 
	
	lea si, s1
	lea di, s2 
	lea bx, re 
	
	mov dx, 0 
	mov cx, 4
outer:
	push cx 
	mov cx, 4 
inner:
	mov al, [si]
	mul ds:byte ptr[di] 						;结果存入ax
	add dx, ax 
	inc si
	inc di 
	loop inner
	
	mov ds:[bx], dx 
	mov di, 16 
	mov dx, 0 
	inc bx
	inc bx 
	
	pop cx 
	loop outer 
	;show
	mov cx, 4 
	lea si, re 
show:
	mov bx, [si]
	call putoutHex
	
	inc si 
	inc si 
	
	push dx 
	push ax 
	
	mov dl, 0dh
	mov ah, 2
	int 21h 
	mov dl, 0ah
	mov ah, 2
	int 21h 

	pop ax
	pop dx
	
	loop show 
	
	mov ax, 4c00h
	int 21h 
	
putoutHex proc 
	push cx
	mov temp, bx
	mov temp1, bx  
	mov cl, 8
	shr temp, cl 
	mov bx, temp
	call main1 
	and  temp, 00ffh
	mov bx, temp1
	call main1
	pop cx 
	ret
	main1 proc
		mov al, bl
		mov cl, 4
		shr al, cl
		cmp al, 10 
		jb kk 
		add al, 7
	kk:
		mov dl, al 
		cmp dl, 0 
		je kk2 
		add dl, 30h 
		mov ah, 2 
		int 21h 
		
		and bl, 0fh 
	kk2:
		cmp bl, 10 
		jb kk1 
		add bl, 7
	kk1:
		mov dl, bl
		add dl, 30h 
		mov ah, 2 
		int 21h 
		ret 
	main1 endp 
putoutHex endp 
code ends
end start

考题:

/* 将字符串中的小写字母转换为大写字母
 *
 *
 */

assume cs:code, ds:data
data segment
pkey db 'please input strings ','$'
InStr db 20 dup(0)
temp dw 0
data ends

code segment
start:
	mov ax, data
	mov ds, ax
	
	mov dx, offset pkey
	mov ah, 9
	int 21h
	
	push dx 
	push ax
	mov dl, 0ah			;回车换行
	mov ah, 2 
	int 21h
	mov dl, 0dh
	mov ah, 2 
	int 21h
	pop ax
	pop dx
	
	mov cx, 0
	lea si, InStr
loop1:
	mov ah, 1
	int 21h
	
	cmp al, '$'
	je over
	
	mov byte ptr[si], al
	inc si
	inc cx
	jmp loop1
over:

	push dx 
	push ax
	mov dl, 0ah			;回车换行
	mov ah, 2 
	int 21h
	mov dl, 0dh
	mov ah, 2 
	int 21h
	pop ax
	pop dx

	lea si, InStr
compL:
	mov bl, [si]
	cmp bl, 'a'
	jb noL
	cmp bl, 'z'
	ja noL
	sub bl, 32
	mov dl, bl
	mov ah, 2
	int 21h
noL:
	inc si
	loop compL
	
	
	mov ah, 1
	int 21h
	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、付费专栏及课程。

余额充值