您好,欢迎来到哗驼汽车网。
搜索
您的当前位置:首页东北大学汇编实验

东北大学汇编实验

来源:哗驼汽车网


东北大学汇编实验

汇编语言程序设计

实验报告

实验1数据传送指令

1、实验目的:了解和掌握MOV、PUSH、POP、_CHG四条指令的作用和在编程中的用法。

2、实验要求:

(Ⅰ)采用立即数寻址方式将19E0H,3F56H,0AF37H,9A81H分别送给EA_、EB_、EC_、ED_四个寄存器。

记录:操作前EA_=750A3388、EB_=7EFDE000、EC_=0、ED_=5操作后EA_=000019E0、EB_=00003F56、EC_=0000AF37、ED_=00009A81操作过程中所用到的指令:

XXX

.code

mainPROC

callDumpRegs

movea_,19E0H

moveb_,ea_

movec_,eb_

moved_,ec_

callDumpRegs

e_it

mainENDP

ENDmain

(Ⅱ)采用采用寄存器寻址方式将19E0H送给EB_、EC_、ED_三个寄存器。

记录:操作前EA_=750A3388、EB_=7EFDE000、EC_=00、ED_=013C1005操作后EA_=000019E0、EB_=000019E0、EC_=000019E0、ED_=000019E0操作过程中所用到的指令:

XXX

.code

mainPROC

callDumpRegs

movea_,19E0H

moveb_,ea_

movec_,eb_

moved_,ec_

callDumpRegs

e_it

mainENDP

ENDmain

(2)对EA_、EB_、EC_、ED_四个寄存器进行出入堆栈的操作。

(Ⅰ)将EA_、EB_、EC_、ED_四个寄存器的内容依次压入堆栈中,注意观察栈指针寄存器和堆栈内容的变化。

记录:压入EA_前ESP=003AF8E8,(ESP)=750A339A

压入EA_后ESP=003AF8E4,(ESP)=750A3388

压入EB_前ESP=003AF8E4,(ESP)=750A3388

压入EB_后ESP=003AF8E0,(ESP)=7EFDE000

压入EC_前ESP=003AF8E0,(ESP)=7EFDE000

压入EC_后ESP=003AF8DC,(ESP)=0

压入ED_前ESP=003AF8DC,(ESP)=0

压入ED_后ESP=003AF8D8,(ESP)=5

操作过程中所用到的指令:XXX

.code

mainPROC

callDumpRegs

movea_,[esp]

callDumpRegs

pushea_

callDumpRegs

pusheb_

callDumpRegs

pushec_

callDumpRegs

pushed_

callDumpRegs

e_it

mainENDP

ENDmain

(Ⅱ)将堆栈中的内容依次弹出到EA_、EB_、EC_、ED_四个寄存器,注意观察栈指针寄存器和堆栈内容的变化。

记录:弹出到EA_前ESP=003AF8D8,(ESP)=5

弹出到EA_后ESP=003AF8DC,(ESP)=0

弹出到EB_前ESP=003AF8DC,(ESP)=0

弹出到EB_后ESP=003AF8E0,(ESP)=7EFDE000

弹出到EC_前ESP=003AF8E0,(ESP)=7EFDE000

弹出到EC_后ESP=003AF8E4,(ESP)=750A3388

弹出到ED_前ESP=003AF8E4,(ESP)=750A3388

弹出到ED_后ESP=003AF8E8,(ESP)=750A339A

操作过程中所用到的指令:popea_

callDumpRegs

popeb_

callDumpRegs

popec_

callDumpRegs

poped_

callDumpRegs

e_it

mainENDP

ENDmain

(3)已知EA_=3F56H,分别利用存储器直接寻址方式和存储器间接寻址方式,将EA_寄存器的内容送到内存单元中。(Ⅰ)存储器直接寻址方式

记录:送出到EA_前EA_=00003F56,

[var]=0

送出到EA_后EA_=00003F56,

[var]=00003F56

操作过程中所用到的指令:

XXX

.data

vardword

.code

mainproc

movea_,var

calldumpregs

movea_,3f56h

calldumpregs

movvar,ea_

calldumpregs

movvar,ea_

callwritehe_

e_it

mainendp

endmain

(Ⅱ)存储器间接寻址方式

记录:送出到EA_前EA_=00003F56,

[var]=0

用于存放地址码的寄存器(esi)=0

送出到EA_后EA_=00003F56,

[var]=00003F56

操作过程中所用到的指令:

XXX

.data

vardword

.code

mainproc

movea_,3F56H

moveb_,var

calldumpregs

movesi,offsetvar

mov[esi],ea_

calldumpregs

moved_,var

e_it

mainendp

endmain

(4)已知EA_=3F56H,EC_=4690H,利用交换指令交换这两个寄存器的内容。

记录:交换前EA_=EC_=0H

交换后EA_=0H,EC_=00003F56H操作过程中所用到的指令:

XXX

.code

mainPROC

movea_,3F56H

movec_,4690H

callDumpRegs

callDumpRegs

e_it

mainENDP

ENDmain

实验二逻辑指令、跳转指令与分支程序设计

1、实验目的:了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的功能和作用,以及此类指令的使用方法。

2、实验要求:具体了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的使用和在使用时应注意的问题,学习分支型程序设计的一般方法。

(1)在DEBUG系统状态下,分别编制、调试并记录以下逻辑指令程序段的每一条指令的运行情况:

moval,41┃EA_=750A3329HAL=29Horal,20┃EA_=750A333DHAL=3DH(Ⅱ)

moval,66┃EA_=750A3342HAL=42Handal,0df┃EA_=750A3342HAL=42H(Ⅲ)

movEA_,5678┃EA_=EH_orEA_,EA_┃EA_=0H(Ⅳ)

movEA_,0ff00┃EA_=0000FF00HnotEA_┃FFFF00FFH(Ⅴ)

movEA_,1234

ZF=1OF=0

testEA_,1

ZF=1OF=0

testEA_,2

ZF=0OF=0

testEA_,4

ZF=1OF=0

testEA_,8

ZF=1OF=0

testEA_,10

ZF=0OF=0

testEA_,20

ZF=0OF=0

testEA_,40

ZF=1OF=0

┃EA_=000004D2HSF=0┃EA_=000004D2HSF=0┃EA_=000004D2HSF=0┃EA_=000004D2HSF=0┃EA_=000004D2HSF=0┃EA_=000004D2HSF=0┃EA_=000004D2HSF=0┃EA_=000004D2HSF=0

testEA_,80┃EA_=000004D2HSF=0ZF=0OF=0

test指令的作用是在源操作数和目的操作数之间进行布尔

“与”运算,但不改变目的操作数,只是设置相应的CPU标志。

(2)已知DATA单元开始存放三个带符号数,编制程序,检查三个数据是否同号,若同时为正,则在显示器上显示“+”;同时为负,则显示“-”;否则显示空格“”。

要求:分别用三组数据(同时为正,同时为负,异号)调试程序,验证程序的正确性。

XXX

.data

var1sword2

var2sword-1

var3sword3

.code

mainPROC

;三个数全部为正

RCLvar1,1;把最高位送到进位位

jcA;进位位为1,即CF为1,符号位为1负数,跳转

RCLvar2,1

RCLvar3,1

moval,'+'

callwritechar

jncD;全部为正,跳到结束

A:;三个数全部为负,此时已有var1为负RCLvar2,1

jncB;无进位位,符号为正,跳转

RCLvar3,1

jncB;如果为正则跳转

moval,'-'

callwritechar

jcD;全部为负,跳到结束

B:;另外一种情况

moval,''

callwritechar

e_it

mainENDP

ENDmain

实验三算术运算类指令、移位指令及循环程序设计

1、实验目的:了解和掌握加、减、乘、除指令的在程序设计中的用法和应注意的问题,了解和掌握移位指令的功能、作用和方法。了解和掌握循环控制类指令的功能、作用和方法。学会循环程序设计的方法。学习汇编语言输出输入语句的设计。

2、实验要求:具体了解和掌握算术类指令、移位指令和循环控制类指令的使用,以及在使用时应注意的问题,学习循环程序设计的一般方法。

(1)在DEBUG系统状态下,分别编制、调试并记录以下加、减程序段的每一条指令的运行情况,查看寄存器的结果:(Ⅰ)

MOVEA_,23┃EA_=5HEB_=7EFDE000H

MOVEB_,0CEDFH┃EA_=5HEB_=0000CEDFH

ADDEA_,EB_┃EA_=0000D834HEB_=0000CEDFH

MOVEA_,23┃EA_=5HEB_=7EFDE000H

MOVEB_,0CEDFH┃EA_=5HEB_=0000CEDFH

SUBEA_,EB_┃EA_=FFFF3A76HEB_=0000CEDFH(Ⅲ)

MOVEA_,237EFDE000H

MOVEB_,0CEDFH0000CEDFH

ADDAH,BH0000CEDFHAH=D7HBH=CEH

ADDAL,BL0000CEDFHAL=34HBL=DFH(Ⅳ)

MOVEA_,237EFDE000H

MOVEB_,0CEDFH0000CEDFH

ADDAH,BH0000CEDFHAH=D7HBH=CEH

ADCAL,BL0000CEDFHAL=34HBL=DFH

EA_=5HEB_=EA_=5HEB_=EA_=0000D755HEB_=EA_=0000D734HEB_=EA_=5HEB_=EA_=5HEB_=EA_=0000D755HEB_=EA_=0000D734HEB_=┃┃┃┃┃┃┃┃

(2)在DEBUG系统状态下,分别编制、调试并记录以下乘、除程序段的每一条指令的运行情况:

MOVAL,23┃EA_=750A3317HEB_=7EFDE000HAL=17H

MOVBL,0CEH

7EFDE0CEHBL=CEH

MULBL

7EFDE0CEH

MOVA_,23

7EFDE000H

MOVB_,0CEDFH

7EFDCEDFH

MULB_

7EFDCEDFH

MOVA_,23

7EFDE000H

MOVBL,0CEH

7EFDE0CEH

┃EA_=750A3317HEB_=┃EA_=750A1282HEB_=┃EA_=750A0955HEB_=┃EA_=750A0955HEB_=┃EA_=750A870BHEB_=┃EA_=750A0955HEB_=┃EA_=750A0955HEB_=

DIVBL┃EA_=750A7B0BHEB_=7EFDE0CEH

MOVA_,23┃EA_=750A0955HEB_=7EFDE000HED_=00C41005H

MOVD_,0856┃EA_=750A0955HEB_=7EFDE000HED_=00C40358H

MOVB_,0CEDFH┃EA_=750A0955HEB_=7EFDCEDFHED_=00C40358H

DIVB_┃EA_=750A0423HEB_=7EFDCEDFHED_=00C544D8H

(3)在DEBUG系统状态下,分别编制、调试并记录以下移位指令程序段的每一条指令的运行情况:

movEA_,420┃EA_=000001A4HshlEA_,1┃EA_=8H(Ⅱ)

movEA_,240┃EA_=000000F0HEB_=7EFDE000HEC_=0H

movcl,4┃EA_=000000F0HEB_=7EFDE000HEC_=4H

shlEA_,cl┃EA_=00000F00HEB_=7EFDE000HEC_=4H

movEA_,8000┃EA_=00001F40HEB_=7EFDE000HEC_=0H

movcl,4

7EFDE000HEC_=4H

shrEA_,cl

7EFDE000HEC_=4H

movEA_,8000

7EFDE000HEC_=0H

movcl,4

7EFDE000HEC_=4H

sarEA_,cl

7EFDE000HEC_=4H

movEA_,8086

7EFDE000HEC_=0H

movcl,4

7EFDE000HEC_=4H

rolEA_,cl

┃EA_=00001F40HEB_=┃EA_=000001F4HEB_=┃EA_=00001F40HEB_=┃EA_=00001F40HEB_=┃EA_=000001F4HEB_=┃EA_=00001F96HEB_=┃EA_=00001F96HEB_=┃EA_=0001F960HEB_=(Ⅳ)(Ⅴ)

7EFDE000HEC_=4H

movEA_,8086┃EA_=00001F96HEB_=7EFDE000HEC_=0H

movcl,4┃EA_=00001F96HEB_=7EFDE000HEC_=4H

rorEA_,cl

7EFDE000HEC_=4H

movEA_,8086

7EFDE000HEC_=0H

rclEA_,cl

7EFDE000HEC_=4H

movEA_,8086

7EFDE000HEC_=0H

movcl,4

7EFDE000HEC_=4H

rcrEA_,cl┃EA_=600001F9HEB_=┃EA_=00001F96HEB_=movcl,4┃EA_=00001F96HEB_=7EFDE000HEC_=4H┃EA_=0001F960HEB_=┃EA_=00001F96HEB_=┃EA_=00001F96HEB_=┃EA_=C00001F9HEB_=

7EFDE000HEC_=4H

rol与rcl、ror与rcr的区别在于rol和ror是将寄存器中的内容直接进行移位,而rcl和rcr是将寄存器中的内容与进位标志中的内容一起进行移位,因此参加移位的数据比原来的数据位数多一位。

(5)已知DATA单元开始存放一组无符号的字节数据,数据长度在CNT单元存放。编制程序,检查该组数据中是否存在数据100,若存在,则在显示器上显示“Y”,否则显示“N”。

XXX

.data

aydword2,100,1

cntword3

.code

mainproc

movc_,cnt

moved_,OFFSETay

moveb_,[ed_]movesi,0

mova_,0

pusha_

cmpb_,100

jeL2

moval,'N'

callWriteChar

jmpQuit

moval,'Y'callWriteCharjmpQuitquit:

popa_

adda_,4addesi,4

moveb_,[ed_+esi]

LOOPL1

e_it

mainendp

endmain

(6)编制在屏幕上显示九九表的程序。XXX

.code

mainproc

moved_,0

callcrlf

moveb_,1

inced_

pushed_

movea_,ed_

muleb_

movesi,ea_

poped_

movea_,eb_callWriteDecpushed_

moval,''callWriteCharpoped_

movea_,ed_callWriteDecpushed_moval,'='callWriteCharpoped_movea_,esicallWriteDecpushed_

moval,''callWriteCharpoped_

cmpeb_,9

jzL4

cmpeb_,ed_jzL1jbL3L3:

inceb_jmpL2L4:

callcrlfe_itmainendp

endmain

Copyright © 2019- huatuowenda.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务