汇编语言实验11完整代码及解析

汇编语言实验11完整代码及解析

建议先自己思考问题的答案,不懂则返回看书
考察点: 对cmp 及 je、jne、jb、jnb、ja、jna的熟练使用

assume cs: code
data segment
 db "Beginner's All-purpose2324 Symb34325olic Instruction Code.",0
data ends

code segment
start:
	mov ax, data
	mov ds, ax
	mov si, 0
	
	call letterc

	mov dh,10		;dh 行号,0-24
	mov dl,8		;dl 列号,0-79
	mov cl,1		;cl 颜色

	mov ax,data
	mov ds,ax
	mov si,0		;ds:si指向字符串首地址
	
	call show_str

	mov ax, 4c00h
	int 21h

letterc:
	push ax
	push si

	mov ax,0
s:
	mov al,ds:[si]
	cmp al,0
	je over
	
	cmp al,97
	jb next
	cmp al,122
	ja next
	sub al,32
	mov ds:[si],al
next:
	inc si
	jmp short s
over:
	pop si
	pop ax
	ret
	
show_str:
	push dx
	push ax
	push di
	push es
	push cx
	push ds
	push si

;实际行号
	mov ax,160
	mul dh		;行号偏移地址存在al中

	mov dh,0
;实际列号
	dec dl
	add dl,dl		;列偏移地址存在dl中
	add ax,dx		
	mov di,ax		;总体偏移地址在di中

	mov ax,0b800h
	mov es,ax		;所以es:[di]指向显存中的第一个位置
	
	mov ah,cl		;颜色存在ah中
	mov cx,0
shows:
	mov al,ds:[si]
	mov cl,al
	jcxz showover
	mov es:[di],ax
	inc si
	add di,2
	jmp short shows
showover:
	pop si
	pop ds
	pop cx
	pop es
	pop di
	pop ax
	pop dx
	ret

code ends
end start

此代码在DOSBox下运行的结果截图:
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值