微机原理上机实验记录

用csdn的编辑器转存某些图片时失败,懒得搞了,原文见我在博客园发的:博客园 - 微机原理上机实验记录

微机原理老师发的 2024年微机原理上机实验要求

重要的资源:

微机原理与接口技术(钱晓捷版)课后习题答案

实验任务1:熟悉DOS环境、熟悉汇编语言的开发过程和数据表达、变量定义及属性

1. 熟悉进入和退出32位控制台和16位DOS环境的方法。

2. 熟悉汇编语言的开发过程,实现教材例题2-1程序。

eg0201.asm

;eg0201.asm
		include io32.inc
		.data
msg    	byte 'Hello,Assembly!',13,10,0
		.code
start:
		mov eax,offset msg
		call dispmsg
		
		exit 0
		end start

3. 掌握数据寻址方式,上机实现教材中的例题2-2程序。

eg0202.asm

;eg0202.asm
include io32.inc
.data
count dword 12345678h,9abcdef0h,0,0,3721h
.code
start:
mov eax,33221100h
mov ebx,eax
mov ecx,count
mov ebx,offset count
mov edx,[ebx]
mov esi,[ebx+4]
mov esi,4
mov edi,count[esi]
mov edi,[ebx+esi]
mov ecx,[ebx+esi*4]
mov edx,[ebx+esi*4-4]
mov ebp,esp
call disprd
exit 0
end start

4. 验证教材例题3-3,实现习题3.14程序。

eg0303

;eg0303.asm
	include io32.inc
	.data
minint	= 10
wvar1	word 0,32768,65535,-32768,0,+32767
wvar2	word 1,-1,38,-38,38h,-38h
wvar3	word ?
wvar4	word 2010h,1020h
	word 5 dup(minint,?)
wvar6	word 3139h,3832h
bvar6	byte 39h,31h,32h,38h
	byte 0
	.code
start:
	mov eax,offset wvar6
	call dispmsg
	exit 0
	end start

ex0314

		include io32.inc
		.data;代码段
table	byte ' | 0 1 2 3 4 5 6 7 8 9 A B C D E F',13,10
		byte '---+-------------------------------',13,10
		byte '20 |',20h,20h,21h,20h,22h,20h,23h,20h,24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20h
		byte 2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h,2fh,20h,13,10
		byte '30 |',30h,20h,31h,20h,32h,20h,33h,20h,34h,20h,35h,20h,36h,20h,37h,20h,38h,20h,39h,20h
		byte 3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h,3fh,20h,13,10
		byte '40 |',40h,20h,41h,20h,42h,20h,43h,20h,44h,20h,45h,20h,46h,20h,47h,20h,48h,20h,49h,20h
		byte 4ah,20h,4bh,20h,4ch,20h,4dh,20h,4eh,20h,4fh,20h,13,10
		byte '50 |',50h,20h,51h,20h,52h,20h,53h,20h,54h,20h,55h,20h,56h,20h,57h,20h,58h,20h,59h,20h
		byte 5ah,20h,5bh,20h,5ch,20h,5dh,20h,5eh,20h,5fh,20h,13,10
		byte '60 |',60h,20h,61h,20h,62h,20h,63h,20h,64h,20h,65h,20h,66h,20h,67h,20h,68h,20h,69h,20h
		byte 6ah,20h,6bh,20h,6ch,20h,6dh,20h,6eh,20h,6fh,20h,13,10
		byte '70 |',70h,20h,71h,20h,72h,20h,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20h
		byte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10
		byte 0
		.code
start:
	    mov eax,offset table
	    call dispmsg
	    exit  0
	    end start

eg0423.asm

.686
	.model flat,stdcall
	option casemap:none
	includelib bin\kernel32.lib
	includelib bin\user32.lib
ExitProcess proto,:DWORD
MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
MessageBox  equ <MessageBoxA>
NULL	equ 0
MB_OK    equ 0
	.data
szCaption    byte '消息窗口',0
outbuffer    byte '本机的处理器是', 12 dup(0),0
outbufsize  = sizeof outbuffer-1
	.code
start:  mov eax,0
	cpuid    ; 获得显示器信息
	mov dword ptr outbuffer+outbufsize-12,ebx
	mov dword ptr outbuffer+outbufsize-8,edx
	mov dword ptr outbuffer+outbufsize-4,ecx
	invoke MessageBox,\
	  NULL,addr outbuffer,addr szCaption,MB_OK
	invoke ExitProcess,NULL
	end start

实验任务2:熟悉汇编语言中的常用传送和运算指令的应用

ex0320.asm

	include io32.inc	
	.code
start:
	mov eax,80h
	call disprf
	call disphd
	call dispcrlf
	add eax,3
	call disprf
	call disphd
	call dispcrlf
	add eax,80h
	call disprf
	call disphd
	call dispcrlf
	add eax,3
	call disprf
	call disphd
	call dispcrlf
	call dispcrlf

	mov eax,100
	call disprf
	call disphd
	call dispcrlf
	add ax,200
	call disprf
	call disphd
	call dispcrlf
	call dispcrlf

	mov eax,100
	call disprf
	call disphd
	call dispcrlf
	add al,200
	call disprf
	call disphd
	call dispcrlf
	call dispcrlf

	mov al,7fh
	call disprf
	call disphd
	call dispcrlf
	sub al,8
	call disprf
	call disphd
	call dispcrlf
	sub al,80h
	call disprf
	call disphd
	call dispcrlf
	sbb al,3
	call disprf
	call disphd
	call dispcrlf
		
	exit 0
	end start

实验任务3:掌握、理解位操作、串操作类指令

ex0328.asm

	include io32.inc
	.data
bcd	byte 92h
	.code
start:
	mov al,bcd
	shr al,4
	add al,30h
	call dispc

	mov al,bcd
	and al,0fh
	add al,30h
	call dispc
exit 0
end start

实验任务4:掌握转移指令和分支程序结构

ex0405.asm

;ex0405.asm
	include io32.inc
	.data
no_msg	byte 'Not Ready!',0
yes_msg	byte 'Ready to Go!',0
	.code
start:
	;mov eax,58h	; 假设一个数据
	mov eax,56h
	;test eax,02h	; 测试D1位(使用D1=1,其他位为0的数据)
	shr eax,2
	;jnz yesm	; D1=1条件成立,转移
	jnc yesm
	mov eax,offset no_msg	; D1=0,显示没有准备好
	jmp done	; 跳转过另一个分支体!
yesm:	mov eax,offset yes_msg	; 显示准备好
done:	call dispmsg

	exit 0
	end start

ex0411.asm

		include io32.inc
		.data
inmsg	byte 'Input number(0~9):',0
ermsg	byte 0dh,0ah,'ERROR! Input again:',0
		.code
start:
		mov eax,offset inmsg
		call dispmsg
again:	call readc
		cmp al,'0'
		jb erdisp
		cmp al,'9'
		ja erdisp
		call dispcrlf
		call dispc
		jmp done
erdisp:	mov eax,offset ermsg
		call dispmsg
		jmp again
done:	
		exit 0
		end start

实验任务5:掌握循环指令和循环程序结构

① 掌握循环指令和循环程序结构。验证例题4-12程序,实现习题4.13程序。

eg0412

;eg0412.asm
	include io32.inc
	.data
string	byte 'Do you have fun with Assembly?',0	; 以0结尾的字符串
	.code
start:
	xor ebx,ebx	 ;EBX用于记录字符个数,同时也用于指向字符的指针
again:	
	mov al,string[ebx]
	cmp al,0
	jz done
	inc ebx  ;个数加1
	jmp again	;继续循环
done:	
	mov eax,ebx	 ;显示个数
	call dispuid
	
	exit 0
	end start

ex0413

	include io32.inc
	.data
	string byte 'Do you have fun with Assembly ?',0  ;以О结尾的字符串
	space dword ?
	.code
start:
	mov esi,offset string
	xor ebx, ebx;  EBX用于记录空格数
again:
	mov al,[esi]
	cmp al,0
	jz donecmp al, 20h  ;空格的ASCII 码是20H
	jne next  ;不相等、不是空格,转移
	inc bx  ;相等、是空格,空格个数加1
next:
	inc esi
	jmp again  ;继续循环
done:
	mov space, ebx  ;保存结果
	mov eax,space
	call dispuid
	exit 0
	end start

② 验证例题4-10程序。实现如下程序:进行自然数相加(1+2+3+……+N);如果(无符号整数的)累加和用一个32位寄存器存储,求出有效累加和的最大值及N的界限。

eg0410.asm

include io32.inc
.data
.code
start:
    mov edx, 1
    mov esi, 2

done1:
    add edx, esi ; 自然数相加,求和
    jc done ; 最高位进位,跳转
    inc esi ; 加数加一
    jmp done1 ; 重复进行自然数相加

done:
    sub esi, 1 ; 加数减一,使累加和不进位而有效
    mov ebx, 1
    mov ecx, 2

nom:
    add ebx, ecx ; 求得有效累加和
    cmp ecx, esi ; 使加数到N的界限停止
    jz again
    inc ecx ; 加数加一
    jmp nom ; 重复进行自然数相加

again:
    mov eax, ebx ; 显示有效累加和的最大值
    call dispuid
    call dispcrlf ; 换行

    mov eax, ecx ; 显示N的界限
    call dispuid

exit 0
end start

来源:
Q:
现在你的环境为64位windows11系统,但是可以使用32位cmd运行make32指令。请基于使用io32.inc的32位汇编语言写一段代码,实现如下程序:进行自然数相加(1+2+3+……+N);如果(无符号整数的)累加和用一个32位寄存器存储,求出有效累加和的最大值及N的界限,并且输出这两个变量。特别注意,请将可以输出结果的完整程序代码写出。
A:
当然,我可以帮你写一段32位汇编语言的代码来实现这个功能。首先,让我们来分析一下问题。

你需要计算自然数相加的累加和(1 + 2 + 3 + … + N),并且将结果存储在一个32位寄存器中。然后,你要找到有效累加和的最大值以及N的界限。

以下是一个满足你需求的汇编代码示例,使用了 io32.inc 文件:

include io32.inc
.data
.code
start:
    mov edx, 1
    mov esi, 2

done1:
    add edx, esi ; 自然数相加,求和
    jc done ; 最高位进位,跳转
    inc esi ; 加数加一
    jmp done1 ; 重复进行自然数相加

done:
    sub esi, 1 ; 加数减一,使累加和不进位而有效
    mov ebx, 1
    mov ecx, 2

nom:
    add ebx, ecx ; 求得有效累加和
    cmp ecx, esi ; 使加数到N的界限停止
    jz again
    inc ecx ; 加数加一
    jmp nom ; 重复进行自然数相加

again:
    mov eax, ebx ; 显示有效累加和的最大值
    call dispuid
    call dispcrlf ; 换行

    mov eax, ecx ; 显示N的界限
    call dispuid

exit 0
end start

这段代码首先使用 edxesi 寄存器进行自然数相加,直到累加和不再进位。然后,它计算有效累加和的最大值并找到N的界限。

请注意,这只是一个示例代码,你可以根据你的需求进行修改。如果你有其他问题或需要进一步的解释,请随时告知![1][2][3]

希望这对你有所帮助!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
--== 微机室上机记录管理系统 V1.3 ==-- 程序更新(2014年5月26日) 1、修正管理员编辑记录时任课教师无法修改的问题; 2、调整管理员后台记录显示为多重条件显示,按照上机时间降序,节次降序,机号升序显示,这样按照机号顺序可以及时查看哪台机器未提交记录。 --== 微机室上机记录管理系统 V1.2 ==-- 程序更新(2010年5月25日) 修正管理员编辑记录时节次无法修改的问题。 --== 微机室上机记录管理系统 V1.1 ==-- 程序更新(2009年12月14日) 修正管理员编辑记录时班级显示错误与提交错误的问题。 --== 微机室上机记录管理系统 V1.0 ==-- 1、本程序为ASP系统,需配置本机支持IIS,将本程序复制到WEB目录并修改数据库路径。 2、设计思路: 学校机房学生填写上机记录,因为缺乏有效管理,记录经常缺失或者个别学生胡乱填写,故参照相关程序设计该程序程序需开机自启动,启动后为全屏无菜单栏、工具栏等相关按钮,学生必须填写提交后方可关闭窗口继续操作,因此添加了一个“启动 Internet Explorer 浏览器”的快捷方式,并设置启动参数为开机全屏,将其添加到启动菜单即可实现该功能。 3、同时鉴于学生填写时出现错误问题的情况,添加了教师后台,教师后台可以编辑或删除不符合要求的记录。教师可通过数据库添加或修改管理员用户名和密码。 4、使用说明: 学生填写部分:本软件采用Macromedia Dreamweaver MX 2004+access编写而成,首页是要求学生填写的内容,其中姓名一是必须填写的,其他为可选项,学生提交后,会提示成功信息,并列出最近填写的前10名名单(主要为了增加学生填写兴趣)。填写成功学生就可以点击关闭链接关闭浏览器继续操作。 5、数据库部分: 本程序数据库为access.mdb,且已备份一个原始空数据库,数据库路径可用记事本程序打开Connections目录下shuju.asp文件,修改“H:\flash_homes\0-JILU\ACCESS.MDB”为本机路径即可。 6、程序使用方法: 程序根目录下有一个“启动 Internet Explorer 浏览器”的快捷方式,该快捷方式可设置为客户机自启动,IE启动后为全屏并打开上机记录系统程序,填写完毕后才出现关闭链接,避免学生不填写记录进入操作。修改该快捷方式属性为本机地址即可。 7、教师管理部分: 在Index.asp首页页面上单击“教师管理”链接,进入教师管理登录页面,输入用户名:admin,密码: admin,进入管理页面,会自动列出最近40个填写的名单,教师可以根据需要修改或者删除不合格的填写记录。教师也可以根据机号查询一台计算机上机记录填写情况,根据需要打印。 8、服务器端获取客户机计算机名的运行命令行: cscript C:\Inetpub\AdminScripts\adsutil.vbs set/w3svc/EnableReverseDNS "TRUE" 在服务器端选择“程序\运行”,运行上述命令即可。 制作:淄博市博山八中 王训波 网址:http://www.5uol.cn QQ:20702537

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值