东北大学汇编实验

时间:2024.3.31

课程编号:B080103020

《汇编语言程序设计》

实验报告

showimg31

东北大学软件学院

实验1 数据传送指令

1、 实验目的:

了解和掌握 MOV、PUSH、POP、XCHG四条指令的作用和在编程中的用法。

2、实验要求:

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

               记录:操作前  EAX=75C59191、  EBX=7FFDE000 、  ECX=00000000、  EDX=00401000

                     操作后  EAX=000019E0、  EBX=00003F56、  ECX=0000AF37、  EDX=00009A81

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

INCLUDE Irvine32.inc

.code

main PROC

   

    call DumpRegs

    mov eax,19E0H

    mov ebx,3F56H

    mov ecx,0AF37H

    mov edx,9A81H

    call DumpRegs

    exit

main endp

END main

(Ⅱ)采用采用寄存器寻址方式将19E0H送给EBX、ECX、EDX三个寄存器。

              记录:操作前  EAX=75C59191、  EBX=7FFDE000 、  ECX=00000000、  EDX=00401000

                     操作后  EAX=000019E0、  EBX=000019E0、  ECX=000019E0、  EDX=000019E0                     操作过程中所用到的指令:

INCLUDE Irvine32.inc

.code

main PROC

   

    call DumpRegs

    mov eax,19E0H

    mov ebx,eax

    mov ecx,ebx

    mov edx,ecx

    call DumpRegs

    exit

main endp

END main

(2)对EAX、EBX、ECX、EDX四个寄存器进行出入堆栈的操作。

(Ⅰ)将EAX、EBX、ECX、EDX四个寄存器的内容依次压入堆栈中,注意观察栈指针寄存器和堆栈内容的变化。

               记录:压入EAX前 ESP=0018FF90, (ESP)=75C5919F

                     压入EAX后 ESP=0018FF8C, (ESP)=00000000

                     压入EBX前 ESP=0018FF8C, (ESP)=00000000

                     压入EBX后 ESP=0018FF88, (ESP)=00000000

                     压入ECX前 ESP=0018FF88, (ESP)=00000000

                     压入ECX后 ESP=0018FF84, (ESP)=00000000

                     压入EDX前 ESP=0018FF84, (ESP)=00000000

                     压入EDX后 ESP=0018FF80, (ESP)=FFFFC000

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

INCLUDE Irvine32.inc

.code

main PROC

   

    call DumpRegs

    mov eax,[esp]

    call DumpRegs

    push eax

   

    call DumpRegs

    push ebx

    call DumpRegs

   

    push ecx

    call DumpRegs

    push edx

    call DumpRegs

   

    exit

main endp

END main

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

               记录:弹出到EAX前 ESP=0018FF90, (ESP)=00000000

                     弹出到EAX后 ESP=0018FF94, (ESP)=00000000    

                     弹出到EBX前 ESP=0018FF94, (ESP)=00000000

                     弹出到EBX后 ESP=0018FF98, (ESP)=00000000    

                     弹出到ECX前 ESP=0018FF98, (ESP)=00000000    

                     弹出到ECX后 ESP=0018FF9C, (ESP)= E18A40B7  

                     弹出到EDX前 ESP=0018FF9C, (ESP)= E18A40B7  

                     弹出到EDX后 ESP=0018FFA0, (ESP)= FFFFF801  

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

include Irvine32.inc

.code

main proc

mov esi,[esp]

call DumpRegs

push eax

mov esi,[esp]

call DumpRegs

push ebx

mov esi,[esp]

call DumpRegs

push ecx

mov esi,[esp]

call DumpRegs

push edx

pop edx

mov esi,[esp]

call DumpRegs

pop ecx

mov esi,[esp]

call DumpRegs

pop ebx

mov esi,[esp]

call DumpRegs

pop eax

mov esi,[esp]

call DumpRegs

exit

main endp

end main

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

          记录:交换前 EAX= 00003F56       , ECX=00004690     

                交换后 EAX= 00004690       , ECX=00003F56      

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

Include Irvine32.inc

.code

main PROC

    mov eax,3F56H

    mov ecx,4690H

    call DumpRegs

    xchg eax,ecx

    call DumpRegs

    exit

main ENDP

END main

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

1、     实验目的:

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

2、     实验要求:

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

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

          (Ⅰ)

                mov al,41     ┃al=29H

                or  al,20     ┃al=3DH

         

          (Ⅱ)               

                mov al,66       ┃al=42H

                and al,0df      ┃al=00H

          (Ⅲ)               

                mov EAX,5678    ┃EAX=0000162EH

                xor EAX,EAX     ┃EAX=00000000H

          (Ⅳ)               

                mov EAX,0ff00   ┃EAX=0000FF00H

                not EAX         ┃EAX=FFFF00FFH

          (Ⅴ)                 

                mov EAX,1234    ┃EAX=000004D2H

                test EAX,1      ┃EAX=000004D2H   SF=0  ZF=1  OF=0

                test EAX,2      ┃EAX=000004D2H   SF=0  ZF=0  OF=0

                test EAX,4      ┃EAX=000004D2H   SF=0  ZF=1  OF=0

                test EAX,8      ┃EAX=000004D2H   SF=0  ZF=1  OF=0

                test EAX,10     ┃EAX=000004D2H   SF=0  ZF=0  OF=0

                test EAX,20     ┃EAX=000004D2H   SF=0  ZF=0  OF=0

                test EAX,40     ┃EAX=000004D2H   SF=0  ZF=1  OF=0

                test EAX,80     ┃EAX=000004D2H   SF=0  ZF=0  OF=0

test指令的作用是____将原操作数与目的操作数相与,但结果不送会目的操作数,只改变标志位,并不修改操作数____________。

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

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

include Irvine32.inc

.data

interray  sdword   23h,23h,-23h

.code

main proc

mov edi,OFFSET interray

mov eax,[edi]

and eax,80000000h

push eax

mov eax,[edi+4]

and eax,80000000h

push eax

mov eax,[edi+8]

and eax,80000000h

push eax

pop eax

pop ebx

pop ecx

jnz L1

cmp eax,ebx

jne L2

cmp eax,ecx

jne L2

mov al,'+'

call WriteChar

exit

L1:

 cmp eax,ebx

 jne L2

 cmp eax,ecx

 jne L2

 mov al,'-'

 call WriteChar

 exit

L2:

      mov al,' '

      call WriteChar

      exit

main endp

end main

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

1、     实验目的:

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

2、     实验要求:

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

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

          (Ⅰ)

              MOV EAX,2389     ┃ EAX=00000955H

              MOV EBX,0CEDFH    ┃EBX=0000CEDFH

              ADD EAX,EBX       ┃EAX= 0000D834H    EBX=0000CEDFH

          (Ⅱ)

              MOV EAX,2389      ┃EAX=00000955H

              MOV EBX,0CEDFH    ┃EBX=0000CEDFH

              SUB EAX,EBX       ┃EAX=FFFF3A76H    EBX=0000CEDFH

          (Ⅲ)

              MOV EAX,2389     ┃EAX=00000955H

              MOV EBX,0CEDFH    ┃EBX=0000CEDFH

              ADD AH,BH       ┃AH=D7 BH=CE

              ADD AL,BL       ┃AL=34 BL=DF

          (Ⅳ)               

              MOV EAX,2389     ┃EAX=00000955H

              MOV EBX,0CEDFH    ┃EBX=0000CEDFH

              ADD AH,BH       ┃AH=D7 BH=CE

              ADC AL,BL       ┃AL=34 BL=DF EFL = 00000213

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

         

          (Ⅰ)

              MOV AL,23         ┃AL=17H

              MOV BL,0CEH       ┃BL=CEH

              MUL BL            ┃AX=1282H  OV=1

          (Ⅱ)

              MOV AX,2389       ┃AX=0955H

              MOV BX,0CEDFH     ┃BX=CEDFH

              MUL BX            ┃DX= 078AH  AX=870BH  CF=1

          (Ⅲ)

              MOV AX,2389       ┃AX=0955H

              MOV BL,0CEH       ┃BL=0CEH

              DIV BL            ┃AH=7BH  AL=0BH

          (Ⅳ)

              MOV AX,2389       ┃AX=0955H

              MOV DX,0856       ┃DX=0358H

              MOV BX,0CEDFH     ┃BX=CEDFH

              DIV BX            ┃AX=0423H DX=44D8H

       

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

          (Ⅰ)

                mov EAX,420    ┃EAX=000001A4H

                shl EAX,1      ┃CF=0 EAX=00000348H

          (Ⅱ)               

                mov EAX,240    ┃EAX=000000F0H

                mov cl,4       ┃CL=04H

                shl EAX,cl     ┃CF=0  EAX=00000F00H

          (Ⅲ)               

                mov EAX,8000   ┃EAX=00001F04H

                mov cl,4       ┃CL=04H

                shr EAX,cl     ┃CF=0 EAX=000001F4H

          (Ⅳ)               

                mov EAX,8000   ┃EAX=00001F04H

                mov cl,4       ┃CL=04H

                sar EAX,cl     ┃CF= 0 EAX=000001F4H

          (Ⅴ)               

                mov EAX,8086   ┃EAX=00001F96H

                mov cl,4       ┃CL=04H

                rol EAX,cl     ┃CF=0 EAX=00001F96H

          (Ⅵ)               

                mov EAX,8086   ┃EAX=00001F96H

                mov cl,4       ┃CL=04H

                ror EAX,cl     ┃CF=0 EAX=60001F9H

          (Ⅶ)               

                mov EAX,8086   ┃EAX=00001F96H

                                                                                                                                        mov cl,4       ┃CL=04H

                rcl EAX,cl     ┃CF=0 EAX=0001F960H

          (Ⅷ)               

                mov EAX,8086   ┃EAX=00001F96H

                mov cl,4       ┃CL=04H

                rcr EAX,cl     ┃CF=0 EAX=C00001F9H

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

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

include Irvine32.inc

.data

ay word 1,4,8,100

cnt word 4

.code

main proc

mov cx,cnt

L1:

  mov ax,0

  push ax

  mov bx,[ay+ax]

  cmp bx,0064h

  je L2

  mov al,'N'

  call WriteChar

  jmp quit

  L2:

      mov al,'Y'

      call WriteChar

      jmp quit

quit:

      pop ax

      add ax,4

     

LOOP L1

exit

main endp

end main

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

include Irvine32.inc

.code

main proc

    mov edx,0

L1: 

     call Crlf    

     mov ebx,1

     inc edx

L3: 

     push edx

     mov eax,edx

     mul ebx

     mov esi,eax

     pop edx

          

     mov eax,ebx

     call WriteDec

     push edx

     mov al,'*'

     call WriteChar

     pop edx

     mov eax,edx

     call WriteDec

     push edx

     mov al,'='

     call WriteChar

     pop edx

     mov eax,esi

     call WriteDec

     push edx

     mov al,' '

     call WriteChar

     pop edx

      

     cmp ebx,9

     jz L2

     

     cmp ebx,edx

     jz L1

    

     inc ebx

     jmp L3

L2:

     call Crlf

    exit

main endp

end main

更多相关推荐:
东北大学物理实验报告

实验一霍尔效应及其应用预习思考题1列出计算霍尔系数载流子浓度n电导率及迁移率的计算公式并注明单位霍尔系数载流子浓度电导率迁移率2如已知霍尔样品的工作电流及磁感应强度B的方向如何判断样品的导电类型以根据右手螺旋定...

东北大学大物实验报告(含灵敏电流计)

东北大学大物实验报告(含灵敏电流计),内容附图。

东北大学物理实验电桥的使用 实际体会详细过程

1实验前进教室以后把书包什么的放到一个角落里不能放实验台上占地方把实验报告和书拿出来最好再拿个本好随时记老师说的注意事项教室的黑板上有板书有关电桥实验的原理的一些东西还有就是一些需要的数据可以把一些必需数据抄下...

东北大学15秋学期《大学物理Ⅰ》在线作业3答案

谋学网15秋学期大学物理在线作业3单选题一单选题共20道试题共100分1选择22R24R2R2R2选择3题面为图片选择4题面为图片选择5根据热力学第二定律下列说法正确的是功可以全部转换为热但热不能全部转换为功热...

东北大学大物实验灵敏电流计

东北大学大物实验灵敏电流计,内容附图。

东北大学数值分析第一次实验报告

数值分析实践报告东北大学软件学院实验一1实验目的1通过上机计算体会迭代法求解线性方程组的特点并能和消去法比较2运用所学的迭代法算法解决各类线性方程组编出算法程序3体会上机计算时终止步骤lt或kgt予给的迭代次数...

东北大学大学物理期末考题及答案20xx

一填空题3cost1已知两分振动的振动方程分别为x1cost和x22其中x的单位为mt的单位为s则合振动的振幅为A2m2在驻波中设波长为则相邻波节和波腹之间的距离为43火车A行驶的速率为20ms火车A汽笛发出的...

东北大学秦皇岛分校实验报告模版

东北大学秦皇岛分校数学与统计学院实验报告一实验目的二作业1

东北大学面向对象程序设计实验报告模板

课程编号B080103110面向对象程序设计实验报告东北大学软件学院一实验目的写出你认为比较重要的实验目的二实验内容简短明确地写出实验的内容三实验步骤1分析要解决的问题给出你的思路2根据对问题的分析写出你的设计...

东北大学软件学院汇编实验报告1

附录二汇编语言程序设计实验报告实验名称班级学号姓名日期成绩评阅人实验1数据传送指令软件学院一实验目的与意义了解和掌握MOVPUSHPOPXCHG四条指令的作用和在编程中的用法二实验环境操作系统windows7调...

1309东北大学大学物理I在线作业2

东北大学土木工程qq群24304749东北大学土木工程qq群24304749A电荷在点和在点时面上的电通量并不相同B电荷在球面外的点和在点时面上的电通量并不相同C电荷在点和在点时面上的电通量会不同但都不为零D电...

20xx东北大学大学物理期末考题及答案

东北大学大学物理期末一填空题t1已知两分振动的振动方程分别为x1cost和x23cos2其中x的单位为mt的单位为s则合振动的振幅为A2m2在驻波中设波长为则相邻波节和波腹之间的距离为43火车A行驶的速率为20...

东北大学大学物理实验报告(29篇)