汇编语言 第14章实验

assume cs:codesg
codesg segment
;CMOS RAM 中 时间信息的存放单元为 秒:0  分:2 日:7  月:8  年:9
start:
		mov ax,0b800h
		mov es,ax
		mov si,160*12
;***********************年份的读取**********************************************		
		mov al,9					;读取年份信息
		out 70h,al					;将9号单元放入70h端口  写入用out
		in al,71h					;从71h端口 中读取年份信息  只存放了19年  用al接受
		
		mov ah,al		
		mov cl,4
		shr ah,cl
		add ah,30h					;转化位十进制数字
		mov es:[si+0],ah			;显示年份的最高位
		mov byte ptr es:[si+1],2	;显示的数字颜色
				
		and al,00001111b
		add al,30h
		mov es:[si+2],al
		mov byte ptr es:[si+3],2
		
		mov byte ptr es:[si+4],47	;年份分隔符 /
		mov byte ptr es:[si+5],2	
;***********************月份的读取**********************************************			
		mov al,8					;读取月份信息
		out 70h,al				
		in al,71h				
		
		mov ah,al		
		mov cl,4
		shr ah,cl
		add ah,30h					;转化位十进制数字
		mov es:[si+6],ah			;显示年份的最高位
		mov byte ptr es:[si+7],2	;显示的数字颜色
				
		and al,00001111b
		add al,30h
		mov es:[si+8],al
		mov byte ptr es:[si+9],2
		
		mov byte ptr es:[si+10],47	;月分隔符 /
		mov byte ptr es:[si+11],2			
;***********************日的读取**********************************************			
		mov al,7					;读取日的信息
		out 70h,al				
		in al,71h				
		
		mov ah,al		
		mov cl,4
		shr ah,cl
		add ah,30h					;转化位十进制数字
		mov es:[si+12],ah			;显示年份的最高位
		mov byte ptr es:[si+13],2	;显示的数字颜色
				
		and al,00001111b
		add al,30h
		mov es:[si+14],al
		mov byte ptr es:[si+15],2
		
		mov byte ptr es:[si+16],32	;空格字符
		mov byte ptr es:[si+17],0			
;***********************时的读取**********************************************			
		mov al,4					
		out 70h,al				
		in al,71h				
		
		mov ah,al		
		mov cl,4
		shr ah,cl
		add ah,30h					;转化位十进制数字
		mov es:[si+18],ah			;显示年份的最高位
		mov byte ptr es:[si+19],2	;显示的数字颜色
				
		and al,00001111b
		add al,30h
		mov es:[si+20],al
		mov byte ptr es:[si+21],2
		
		mov byte ptr es:[si+22],58	; : 字符
		mov byte ptr es:[si+23],2	


;***********************分的读取**********************************************			
		mov al,2					
		out 70h,al				
		in al,71h				
		
		mov ah,al		
		mov cl,4
		shr ah,cl
		add ah,30h					;转化位十进制数字
		mov es:[si+24],ah			;显示年份的最高位
		mov byte ptr es:[si+25],2	;显示的数字颜色
				
		and al,00001111b
		add al,30h
		mov es:[si+26],al
		mov byte ptr es:[si+27],2
		
		mov byte ptr es:[si+28],58	;空格字符
		mov byte ptr es:[si+29],2	


;***********************秒的读取**********************************************			
		mov al,0					
		out 70h,al				
		in al,71h				
		
		mov ah,al		
		mov cl,4
		shr ah,cl
		add ah,30h					;转化位十进制数字
		mov es:[si+30],ah			;显示年份的最高位
		mov byte ptr es:[si+31],2	;显示的数字颜色
				
		and al,00001111b
		add al,30h
		mov es:[si+32],al
		mov byte ptr es:[si+33],2
	
		mov ax,4c00h
		int 21h
codesg ends
end start

在这里插入图片描述

### 汇编语言第四版 实验十 教程 或 实验指导 汇编语言第四版的实验十通常涉及对数据处理和存储单元操作的深入理解,结合提供的引用内容,可以推测实验可能涵盖以下主题:使用 `bx`、`si`、`di` 和 `bp` 寄存器进行地址计算[^2],以及通过调试工具(如 Debug)执行指令并观察内存变化[^1]。 以下是关于实验十的一个详细指导: #### 1. 实验目标 实验十的目标通常是帮助学习者掌握如何在汇编语言中处理复杂的数据结构,并通过调试工具验证程序的正确性。具体包括: - 理解寄存器在地址计算中的作用。 - 使用 Debug 工具手动输入机器码并运行。 - 编写一个简单的汇编程序,完成特定任务(例如将字符串转换为大写或计算数值的幂次方)。 #### 2. 实验环境 - **硬件**:PC 或模拟器。 - **软件**:DOS 系统及 Debug 工具。 #### 3. 示例程序分析 以下是一个示例程序,用于将字符串中的每个字符转换为大写形式。此程序基于引用[2]的内容进行扩展。 ```assembly assume cs:codesg, ds:datasg datasg segment db 'ibm ', 'dec ', 'dos ', 'vax ' ; 原始数据 datasg ends stacksg segment dw 0, 0, 0, 0, 0, 0, 0, 0 ; 栈段定义 stacksg ends codesg segment start: mov ax, stacksg mov ss, ax mov sp, 16 mov ax, datasg mov ds, ax mov bx, 0 ; 初始化 bx 为偏移地址 mov cx, 4 ; 外层循环次数(4 行) s0: push cx ; 保存外层循环计数器 mov si, 0 mov cx, 3 ; 内层循环次数(每行 3 个字符) s: mov al, [bx+si] ; 读取字符 and al, 11011111b ; 转换为大写字母 mov [bx+si], al ; 写回内存 inc si loop s add bx, 16 ; 移动到下一行 pop cx ; 恢复外层循环计数器 loop s0 mov ax, 4c00h int 21h codesg ends end start ``` #### 4. 使用 Debug 工具验证程序 根据引用[1]和[4],可以通过 Debug 工具验证上述程序的执行过程: - 使用 `-e` 命令手动向内存写入机器码[^1]。 - 使用 `-d` 命令查看内存中的数据变化[^4]。 - 使用 `-u` 命令将内存中的机器码翻译为汇编指令[^4]。 - 使用 `-r` 命令设置寄存器值,并通过 `-t` 命令逐步执行程序[^4]。 #### 5. 注意事项 - 在编写程序时,确保正确初始化段寄存器(如 `DS` 和 `CS`)。 - 使用 Debug 工具时,注意地址的十六进制表示法。 - 对于复杂的地址计算,建议先在纸上推导公式,再将其转化为汇编代码。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值