首页 > 实用范文 > 其他范文
西安交通大学第二次汇编上机实验报告[优秀范文5篇]
编辑:风月无边 识别码:130-912300 其他范文 发布时间: 2024-02-16 10:17:01 来源:网络

第一篇:西安交通大学第二次汇编上机实验报告

80x86 汇编语言程序设计课内实验报告 班级

实验时间 5.31 姓名

学号

实验内容概述 主要对第五章所学的循环了分支结构进行了实践。

第一题循环结构比大小,把最大值的最大值的相对位置存储在数组之后的两位 第二题循环结构找两数组之间的相同数字 第三题分支结构对数组里出现的元素进行计数 实验步骤

一(1)对数据求源码(负数取反后加一)(2)取每个数的绝对值(3)从前向后两两比较,如果当前数字比 max 的记录值大,那么更新当前数字的 max,并存储当前位置 pos 二(1)根据数组 a 的长度设置外循环次数(2)根据数组 b 的长度设置外循环次数(3)外循环遍历 a 的每一个元素,将 a 中每一个元素与 b 中元素比较,如果相同,则终止当前内循环,将该值存储在 c 数组中 三(1)定义一个分支结构,先判断当前值,如果相等,则跳转至对应子程序:使存储该数字出现次数的位置上加一(2)程序运行结束时,在 dos 窗口输出每个元素出现的次数,实验中遇到的问题及其解决方法 1、mov 指令用错 当时报错后,查找了 mov 指令的课本内容,想起来存储单元之间不能直接赋值,已解决 2、逻辑正确,数据错误 当时确认逻辑无误之后,我的内心非常纠结,甚至出现了想要重装软件的想法,后来利用 u 和 t 指令,一步步找错,发现是比例因子出现错误,将 inc cx改为 add cx,2 后解决 实验结果

结果均正确

202_

年月

建议 无 备注 无

第二篇:西安交通大学汇编第二次上机实验报告

提交上机结果的模板文件 第 2 次线上上机 班级 学号 姓名

1、循环程序设计-1(1)汇编、连接后的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:masm xun 得到 xun.obj,xun.crf,xun.lst 文件,通过 link xun 得到 xun.map 文件,显示编译成功。

(2).lst 文件的截图,TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:通过 masm 对程序进行编译时生成.lst 文件,通过 notepad++打开.lst 文件,并进行截图(3)反汇编的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:在 debug 环境下执行 u 指令,显示出反汇编代码。

(4)在完成 DS 赋值后,立即显示各个寄存器的值

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:按单步 t 之后,下方出现 MOV DS,AX,即下一条即将执行的指令为 MOV DS,AX,再按一次 t,此时 DS 被赋值,此时执行的 r 指令显示的就是 DS 赋值后各个寄存器的值。

(5)在进行计算前,显示数组 M 开始的 n+2 个字的内存值的截图(只能显示这n+2 个字的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:在 debug 环境下,执行 d 指令显示内存,由于不能显示其他字的内存值,所以只能

一行一行截图,可以看到,此时内存值与程序初始定义值相同。

(6)执行完计算后,立即显示各个寄存器的值

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:先执行 g 指令到执行回到 dos 系统指令,此时显然已经执行完运算,此时执行 r 指令就获得执行完运算后各个寄存器的值。

(7)执行完计算后,显示数组 M 开始的 n+2 个字的内存值的截图(只能显示这n+2 个字的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于要求是不能显示其他字的值,所以只能一行一行截图,可以看到此时内存值与期望结果相同。

(8)源代码

TODO:你的源代码(必选)

;empty asm file

title I love asm

data segment n

dw 0010h

M

dw

0021h,0084h,0041h,0010h,0027h,0018h,0044h,0011H,0002h,0028h,0024h,0020h,0022h,0014h,0030h,0040h

DATA1 DW ?

ADDRR DW ?

data ends

code segment

assume cs:code, ds:data

main

proc

;assign the data segment base address to DS

mov

ax, data

mov

ds, ax

;TODO...;| add your code between arrows |

;v----------------------------v

MOV CX, n

;循环计数器

LEA DI, M

MOV AX,[DI]

;取第一个数

MOV ADDRR, DI

;记下绝对值最大的数的地址

CMP AX,0

;此数是正数吗?

JNS ZHEN

;是正数,即为绝对值,转去判断下一个数

NEG AX

;不是正数,变为其绝对值

ZHEN:MOV BX,[DI]

CMP BX,0

;此数是正数吗?

JNS COMP

;是正数,即为绝对值,转去比较绝对值大小

NEG BX

;不是正数,变为其绝对值

COMP: CMP AX, BX

;判断绝对值大小

JAE ADDRESS

MOV AX, BX

;(AX)<(BX),使(AX)中为绝对值最大的数

MOV ADDRR, DI

;记下绝对值最大的数的地址

ADDRESS:ADD DI, 2

LOOP ZHEN

MOV

DATA1, AX

;记下此数

;^----------------------------^

;|

The END

|

;method 2: return to dos

mov

ax, 4c00h

int

21h

main

endp code ends end main

2、循环程序设计-2 (1)汇编、连接后的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:masm xun 得到 xunhuan.obj,xunhuan.crf,xunhuan.lst 文件,通过 link xunhaun 得到xunhaun.map 文件,显示编译成功。

(2).lst 文件的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:通过 masm 编译 jishu,获得 jishu.lst 文件,要 notepad++打开并进行截图。

(3)反汇编的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:在 debug 环境下执行 u 指令显示出反汇编代码。

(4)在进行计算前,显示数组 A 中 15 个整数的内存值的截图(只能显示这 15个整数的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于不能显示其他数内存值,所以一行一行进行截图,可以看到,此时内存值与程序初始定义相同。

(5)在进行计算前,显示数组 B 中 20 个整数的内存值的截图(只能显示这 20个整数的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于不能显示其他整数内存值,所以一行一行进行截图,可以看到,此时数组 B 中的内存值与程序初始定义相同。

(6)在进行计算前,显示数组 C 中 15 个整数的内存值的截图(只能显示这 15个整数的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于不能显示其他整数内存值,所以一行一行进行截图,可以看出,此时内存值与程序初始定义相同。

(7)执行完计算后,立即显示各个寄存器的值

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:先用 g 指令跳到返回 dos 调用指令,此时已经执行完计算,再执行 r 指令,显示的就是执行完运算的各个寄存器的值。

(8)执行完计算后,显示数组 A 中 15 个整数的内存值的截图(只能显示这 15个整数的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于要求是不能显示其他字的值,所以只能一行一行截图,可以看到此时内存值与期望结果相同。

(9)执行完计算后,显示数组 B 中 20 个整数的内存值的截图(只能显示这 20个整数的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于要求是不能显示其他字的值,所以只能一行一行截图,可以看到此时内存值与期望结果相同。

(10)执行完计算后,显示数组 C 中 15 个整数的内存值的截图(只能显示这 15个整数的内存值,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于要求是不能显示其他字的值,所以只能一行一行截图,可以看到此时内存值与期望结果相同。

(11)源代码

TODO:你的源代码(必选)

;empty asm file

title I love asm

data segment

A

dw

0027h,0018h,0021h,0028h,0024h,0020h,0022h,0014h,0011h,0010h,0012h,0017h,0084h,0081h,0080H

B

dw

0018h,0021h,0028h,0024h,0020h,0022h,0044H,0041h,0011h,0010h,0012h,0017h,0084h,0081h,0080h,0040h,0042h,0047h,0002h,0007h

C1

DWDUP(?)data ends

code segment

assume cs:code, ds:data

main

proc

;assign the data segment base address to DS

mov

ax, data

mov

ds, ax

;TODO...;| add your code between arrows |

;v----------------------------v

mov si,0

MOV DI,0

mov bx,A

jiao:MOV CX,B[SI]

;想法是 di 指 A 中的元素,di 递增,拿 A 中的一个元素每次与 B 中的所有元素作比较

CMP A[DI],CX

;直到遇到相同为止,如果没有遇到相同,有设置对 si 值比较指令,b 中所有元素相同时

JZ JI

;会跳转到 JI

INC SI

INC SI

CMP SI,42

JZ JI

JMP jiao

JI:mov ax,B[SI]

mov C1[DI],AX

MOV SI,0

INC DI

INC DI

CMP DI,32

JZ EXIT

JMP jiao

;^----------------------------^

;|

The END

|

;method 2: return to dos

EXIT: mov

ax, 4c00h

int

21h

main

endp code ends end main

3、分支程序设计 (1)汇编、连接后的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:masm xun 得到 jishu.obj,jishu.crf,jishu.lst 文件,通过 link xun 得到 jishu.map 文件,显示编译成功。

(2).lst 文件的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:通过 masm 形成 jishu.lst 文件,通过 notepad++打开,并进行截图。

(3)反汇编的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:在 debug 环境下执行 u 指令,显示出反汇编代码。

(4)在完成 DS 赋值后,立即显示各个寄存器的值

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:第一步 t 指令执行底下为 MOV DS,AX,说明接下来执行的指令是 MOV DS,AX,所以再执行一次 t 指令,然后用 r 指令显示寄存器当前的值。

(5)在进行计算前,显示在数据段中定义的学号字符串的内存值的截图(只能显示完整的学号字符串,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于不能显示其他内存值,所以一行一行进行截图,可以看出,此时内存值与程序初始定义相同。

(6)在进行计算前,显示在数据段中定义的 COUNT 数组的内存值的截图(只能显示完整的 COUNT 数组内容,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于不能显示其他内存值,所以一行一行进行截图,可以看出,此时内存值与程序初始定义相同。

(7)执行完计算后,立即显示各个寄存器的值

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:通过执行 g 指令跳到调用 dos 系统的指令,此时已经执行完运算,再执行 r 指令,显示出的就是执行完计算后各个寄存器的值。

(8)执行完计算后,显示在数据段中定义的学号字符串的内存值的截图(只能显示完整的学号字符串,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:执行 d 指令显示出内存值,由于不能显示其他内存值,所以一行一行进行截图,可以看出,此时内存值与程序期望相同。

(9)执行完计算后,显示在数据段中定义的 COUNT 数组的内存值的截图(只能显示完整的 COUNT 数组内容,多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

说明:说明:执行 d 指令显示出内存值,由于不能显示其他内存值,所以一行一行进行截图。学号为 2184411027,0-9 个数分别为 1,3,2,0,2,0,0,1,1,0,结果正确。

(10)程序在 DOSBox 下直接运行的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(11)源代码

TODO:你的源代码(必选)

;empty asm file

title I love asm

data segment

A

dw

0027h,0018h,0021h,0028h,0024h,0020h,0022h,0014h,0011h,0010h,0012h,0017h,0084h,0081h,0080H

B

dw

0018h,0021h,0028h,0024h,0020h,0022h,0044H,0041h,0011h,0010h,0012h,0017h,0084h,0081h,0080h,0040h,0042h,0047h,0002h,0007h

C1

DWDUP(?)data ends

code segment

assume cs:code, ds:data

main

proc

;assign the data segment base address to DS

mov

ax, data

mov

ds, ax

;TODO...;| add your code between arrows |

;v----------------------------v

mov si,0

MOV DI,0

mov bx,A

jiao:MOV CX,B[SI]

;想法是 di 指 A 中的元素,di 递增,拿 A 中的一个元素每次与B 中的所有元素作比较

CMP A[DI],CX

;直到遇到相同为止,如果没有遇到相同,有设置对 si 值比较指令,b 中所有元素相同时

JZ JI

;会跳转到 JI

INC SI

INC SI

CMP SI,42

JZ JI

JMP jiao

JI:mov ax,B[SI]

mov C1[DI],AX

MOV SI,0

INC DI

INC DI

CMP DI,32

JZ EXIT

JMP jiao

;^----------------------------^

;|

The END

|

;method 2: return to dos

EXIT: mov

ax, 4c00h

int

21h

main

endp code ends end main

第三篇:西安交通大学第四次汇编上机

提交上机结果的模板文件 第 4 次上机 班级 学号 姓名 物联网 81 2184411027 李威江

1、输入输出程序设计 (1)汇编、连接后的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(2).lst 文件的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(3)反汇编的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(4)在调用被测子程序前,显示 ID、hh、mm、se 以及 shh、smm、sss 的内存值的截图(多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(5)运行到返回 dos 前暂停,对屏幕显示的输出结果(运行时间的字符串)截

图【结果要与步骤(6)中的内存值一致】

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

倒数第三行为输出结果,考虑到计算机计算速率达到 GHz,故运行时间不足 1 秒也很合理(6)在完成步骤(5)的操作后,立即显示 ID、hh、mm、se 以及 shh、smm、sss 的内存值的截图(多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(7)源代码

TODO:你的源代码(必选)

DATA SEGMENT

ID DB 41H,26H,35H

HH DB ?

MM DB ?

SE DB ?

SHH DB 2 DUP(?)

SMM DB 2 DUP(?)

SSS DB 2 DUP(?)

TAIL DB “$” DATA ENDS CODE SEGMENT

MAIN PROC FAR

ASSUME

CS:CODE,DS:DATA

START:

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

CALL ENCRYPT

MOV AX,4C00H

INT 21H

MAIN ENDP

ENCRYPT PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

MOV AH,02H

INT 21H

MOV HH,CH

MOV MM,CL

MOV SE,DH

MOV AH,02H

INT 21H

SUB CH,HH

MOV HH,CH

ADD CH,30H

MOV SHH,CH

SUB CL,MM

MOV MM,CL

ADD CL,30H

MOV SMM,CL

SUB DH,SE

MOV SE,DH

ADD DH,30H

MOV SSS,DH

POP DX

POP CX

POP BX

POP AX

MOV AH,9

LEA DX,SHH

INT 21H

RETURN:

RET

ENCRYPT ENDP

CODE ENDS END START

2、中断程序设计 (1)汇编、连接后的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(2).lst 文件的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(3)反汇编的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(4)在进行计算前,显示 ID、NUM 的内存值的截图(多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(5)运行到返回 dos 前暂停,对屏幕显示的输出结果(NUM 值的对应的 ASCII字符串)截图【结果要与步骤(6)中的内存值一致】

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(6)在完成步骤(5)操作后,立即显示 ID、NUM 的内存值的截图(多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

内存区与输出一致(7)源代码

TODO:你的源代码(必选)

data segment

ID DB 41H,26H,35H

NUM DW ? data ends

code segment

assume cs:code, ds:data

main

proc

;assign the data segment base address to DS

mov

ax, data

mov

ds, ax

MOV AL,1CH

MOV AH,35H

INT 21H

PUSH ES

PUSH BX

PUSH DS

MOV DX,OFFSET COUNT

MOV AX,SEG COUNT

MOV DS,AX

MOV AL,1CH

MOV AH,25H

INT 21H

POP DS

IN AL,21H

AND AL,11111110B

OUT 21H,AL

STI

DELAY: MOV AH,0

INT 16H

CMP AL,51H

JE EXIT

CMP AL,71H

JE EXIT

JMP DELAY

EXIT: MOV SI,DS

POP DX

POP DS

MOV AL,1CH

MOV AH,25H

INT 21H

MOV DS,SI

MOV AX,NUM

MOV BX,04H

MOV CL,04H LOOP1: ROL AX,CL

PUSH AX

AND AX,000FH

CMP AL,0AH

JGE CHANGE

ADD AL,30H

JMP PRINT CHANGE: ADD AL,37H PRINT: MOV DL,AL

MOV AH,02H

INT 21H

POP AX

DEC BX

CMP BX,0

JNZ LOOP1

MOV DL,48H

MOV AH,02H

INT 21H

MOV AX,4C00H

INT 21H

MAIN ENDP

COUNT PROC NEAR

PUSH AX

PUSH DS

MOV AX,DATA

MOV DS,AX

INC NUM

POP DS

POP AX

IRET

COUNT ENDP CODE ENDS END MAIN

code ends end main

3、BIOS 和 DOS 中断(1)汇编、连接后的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(2).lst 文件的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(3)反汇编的截图

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(4)在进行计算前,显示 ID、BUFFER 的内存值的截图(多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(5)输入回车后,显示 ID、BUFFER 的内存值的截图(多显示、少显示均扣分)

TODO:你的截图(必选)

TODO:你的文字解释说明(可选)

(6)源代码

TODO:你的源代码(必选)

DATA SEGMENT

ID DB “2186412635”

BUFFER DB 10 DUP(?)

PWD DB 7,5,9,1,3,6,8,0,2,4

ARRAY DB 11

DB 11 DUP(?)

DB “$” DATA ENDS CODE SEGMENT

MAIN PROC FAR

ASSUME

CS:CODE,DS:DATA

START:

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV AH,10

LEA DX,ARRAY

INT 21H

MOV CX,10

LEA BX,ARRAY

ADD BX,2

MOV SI,0

ENCRYPT:

MOV AL,PWD[SI]

XLAT

MOV BUFFER[SI],AL

INC SI

LOOP ENCRYPT

RET

MAIN ENDP CODE ENDS END START

第四篇:西安交通大学光学扳手实验报告

光学扳手——光的轨道角动量探秘 — 实验报告

班级:物联网 81

姓名:李威江 学号:2184411027 一.实验现象 :调节好实验装置后,实验现象如下:

图一为 CCD1 的图像,图二为 CCD2的图像,图三为 CCD3 的图像,图四到图八为 CCD4 在不同参数下的图像,在 CCD4 中可以观察到微粒的运动。

图(一):

图(二):

图(三):

图(四):

图(五):

图(六):

图(七):

图(八):

实验感悟:通过近一个小时的实验,我认识了激光模式有拉盖尔高斯模式,厄米高斯模式并且对于汇聚光场与微观粒子的力学相互作用有了初步的了解。掌握了柱状透镜激光模式变换,能利用柱状透镜观察 LG 模式与 HG 模式直接的转换。利用圆偏振光捕获单轴晶体(双轴晶体)微观粒子,在实验中观察到了微观粒子的自转行为,最后利用空间光调制器产生涡旋光场,并捕获微观粒子,观察微观粒子沿着涡旋光场进行公转的行为。

如果把光比喻成行进的列车,过去的透镜如同依靠弯曲的轨道调整列车运行方向。现在的光扳手可以直接改变列车的运行方向。虽然现在还没有对其进行实际应用,但是它的前景非常光明,应该可以大大增加光通信的信息传输量,可以被用于制造更加高级的光学器件。

第五篇:西安交通大学第三次汇编实验报告

80x86 汇编语言程序设计课内实验报告 班级

实验时间 202_-6-3 姓名

学号

实验内容概述

1、对学生成绩存为一个数组,并根据 10 分为一段进行计次 2、使用递归子程序实现斐波那契数列 3、利用高级汇编语言技术里的条件汇编,实现对字符串长度的判断,若长度大于等于 10,则将指定程序段执行 5 次 实验步骤

1、将学生成绩和用来记录分数段人数的变量放入程序段,然后遍历每一个学生的成绩并判断 2、编写子程序 FIB 实现递归调用和前两位求和,指定寄存器 AX 和 DX 存储所得到的当前数据和前一位数据 3、利用变量 K 计算指定字符串的长度,用条件汇编 IF 对 K 判断,如果大于等于 10,则重复汇编指定指令 实验中遇到的问题及其解决方法 1、问题  在宏汇编中 IF 无法对程序计算得出后存储在寄存器中的结果进行判断  问题是在实验 3 中遇到,解决的思路是先尝试用立即数方式可以运行,但考虑到程序的使用性,面对较长的字符串,无法直接得出立即数。后在宏汇编加入新的形参变量,运行后发现实参只有是立即数才可成功运行  解决问题的步骤是在数据段直接进行 K EQU S-X 指令,则 K 是经过计算后长度常量,符合程序要求

………… 实验结果

正确

****年**月**日 建议 无 备注 无

西安交通大学第二次汇编上机实验报告[优秀范文5篇]
TOP