东北大学汇编实验

时间:2024.4.1

(附录二)

汇编语言程序设计

实验报告


实验1 数据传送指令

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

2、实验要求:

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

               记录:操作前  EAX=  750A3388    、  EBX= 7EFDE000     、  ECX= 00000000    、  EDX= 01361005    

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

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

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

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

               记录:操作前  EAX=  750A3388    、  EBX=  7EFDE000    、  ECX=  000000000    、  EDX= 013C1005   

                     操作后  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= 003AF8E8     , (ESP)= 750A339A   

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

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

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

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

                     压入ECX后 ESP= 003AF8DC     , (ESP)=  00000000  

                     压入EDX前 ESP= 003AF8DC     , (ESP)=  00000000  

                     压入EDX后 ESP=  003AF8D8    , (ESP)= 00241005   

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

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=  003AF8D8    , (ESP)= 00241005   

                     弹出到EAX后 ESP= 003AF8DC     , (ESP)=  00000000  

                     弹出到EBX前 ESP= 003AF8DC     , (ESP)=  00000000  

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

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

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

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

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

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

pop  eax

   call DumpRegs

        pop  ebx

   call DumpRegs

        pop  ecx

        call DumpRegs

        pop  edx

   call DumpRegs

   exit

main ENDP

END main

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

         (Ⅰ)存储器直接寻址方式

               记录:送出到EAX前 EAX=  00003F56     , [var]=00000000  

                     送出到EAX后 EAX=  00003F56      , [var]=00003F56 

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

include Irvine32.inc

.data

var dword ?

.code

   main proc

   mov eax,var

   call dumpregs

   mov eax,3f56h

   call dumpregs

   mov var,eax

   call dumpregs

   mov var,eax

   call writehex

exit

main endp

end main

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

               记录:送出到EAX前 EAX=  00003F56     , [var]=00000000    

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

                     送出到EAX后 EAX=00003F56      ,  [var]=00003F56    

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

include Irvine32.inc

.data

var dword ?

.code

   main proc

   mov eax,3F56H

   mov ebx,var

   call dumpregs

   mov esi,offset var

   mov [esi],eax

   call dumpregs

   mov edx,var

exit

main endp

end main

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

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

                交换后 EAX=  00004690H, ECX=00003F56H

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

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     ┃EAX = 750A3329H  AL=29H

                or  al,20     ┃EAX = 750A333DH  AL=3DH

          (Ⅱ)               

                mov al,66     ┃EAX = 750A3342H AL=42H

                and al,0df    ┃EAX = 750A3342H AL=42H

          (Ⅲ)               

                mov EAX,5678   ┃EAX = 0000162EH

                xor EAX,EAX    ┃EAX = 00000000H

          (Ⅳ)               

                mov EAX,0ff00  ┃EAX=0000FF00H

                not EAX        ┃FFFF00FFH

          (Ⅴ)               

                mov EAX,1234   ┃EAX = 000004D2H  SF=0  ZF=1  OF=0

                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指令的作用是    在源操作数和目的操作数之间进行布尔“与”运算,但不改变目的操作数,只是设置相应的CPU标志 。  

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

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

INCLUDE Irvine32.inc

.data

var1 sword  2

var2 sword  -1

var3 sword  3

.code

main PROC

       ;三个数全部为正

   RCL var1,1              ;把最高位送到进位位

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

   RCL var2,1

   jc B

   RCL var3,1

   jc B

   mov al,'+'

   call writechar

   jnc D                     ;全部为正,跳到结束

  

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

   RCL var2,1              

   jnc B                    ;无进位位,符号为正,跳转

   RCL var3,1

   jnc B                    ;如果为正则跳转

   mov al,'-'

   call writechar

   jc D                      ;全部为负,跳到结束

B:      ;另外一种情况

   mov al,' '

   call writechar

D:

   exit

main ENDP

END main

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

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

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

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

          (Ⅰ)

              MOV EAX,2389      ┃EAX = 00000955H  EBX = 7EFDE000H

              MOV EBX,0CEDFH    ┃EAX = 00000955H  EBX = 0000CEDFH

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

          (Ⅱ)

              MOV EAX,2389      ┃EAX = 00000955H  EBX = 7EFDE000H

              MOV EBX,0CEDFH    ┃EAX = 00000955H  EBX = 0000CEDFH

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

          (Ⅲ)

              MOV EAX,2389    ┃EAX = 00000955H  EBX = 7EFDE000H

              MOV EBX,0CEDFH  ┃EAX = 00000955H  EBX = 0000CEDFH

              ADD AH,BH       ┃EAX = 0000D755H  EBX = 0000CEDFH  AH=D7H BH=CEH

              ADD AL,BL       ┃EAX = 0000D734H  EBX = 0000CEDFH  AL=34H BL=DFH

          (Ⅳ)               

              MOV EAX,2389    ┃EAX = 00000955H  EBX = 7EFDE000H

              MOV EBX,0CEDFH  ┃EAX = 00000955H  EBX = 0000CEDFH

              ADD AH,BH       ┃EAX = 0000D755H  EBX = 0000CEDFH AH=D7H BH=CEH

              ADC AL,BL       ┃EAX = 0000D734H  EBX = 0000CEDFH AL=34H BL=DFH

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

          (Ⅰ)

              MOV AL,23       ┃EAX = 750A3317H EBX = 7EFDE000H AL=17H

              MOV BL,0CEH     ┃EAX = 750A3317H EBX = 7EFDE0CEH BL=CEH

              MUL BL          ┃EAX = 750A1282H EBX = 7EFDE0CEH

          (Ⅱ)

              MOV AX,2389     ┃EAX = 750A0955H EBX = 7EFDE000H

              MOV BX,0CEDFH   ┃EAX = 750A0955H EBX = 7EFDCEDFH

              MUL BX          ┃EAX = 750A870BH EBX = 7EFDCEDFH

          (Ⅲ)

              MOV AX,2389     ┃EAX = 750A0955H EBX = 7EFDE000H

              MOV BL,0CEH     ┃EAX = 750A0955H EBX = 7EFDE0CEH

              DIV BL          ┃EAX = 750A7B0BH EBX = 7EFDE0CEH

          (Ⅳ)

              MOV AX,2389     ┃EAX = 750A0955H  EBX = 7EFDE000H  EDX = 00C41005H

              MOV DX,0856     ┃EAX = 750A0955H  EBX = 7EFDE000H  EDX = 00C40358H

              MOV BX,0CEDFH   ┃EAX = 750A0955H  EBX = 7EFDCEDFH  EDX = 00C40358H

              DIV BX          ┃EAX = 750A0423H  EBX = 7EFDCEDFH  EDX = 00C544D8H

         

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

          (Ⅰ)

                mov EAX,420    ┃EAX = 000001A4H

                shl EAX,1      ┃EAX = 00000348H

          (Ⅱ)               

                mov EAX,240    ┃EAX = 000000F0H  EBX = 7EFDE000H  ECX = 00000000H

                mov cl,4       ┃EAX = 000000F0H  EBX = 7EFDE000H  ECX = 00000004H

                shl EAX,cl     ┃EAX = 00000F00H  EBX = 7EFDE000H  ECX = 00000004H

          (Ⅲ)               

                mov EAX,8000   ┃EAX = 00001F40H  EBX = 7EFDE000H  ECX = 00000000H

                mov cl,4       ┃EAX = 00001F40H  EBX = 7EFDE000H  ECX = 00000004H

                shr EAX,cl     ┃EAX = 000001F4H  EBX = 7EFDE000H  ECX = 00000004H

          (Ⅳ)               

                mov EAX,8000   ┃EAX = 00001F40H  EBX = 7EFDE000H  ECX = 00000000H

                mov cl,4       ┃EAX = 00001F40H  EBX = 7EFDE000H  ECX = 00000004H

                sar EAX,cl     ┃EAX = 000001F4H  EBX = 7EFDE000H  ECX = 00000004H

          (Ⅴ)               

                mov EAX,8086   ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000000H

                mov cl,4       ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000004H

                rol EAX,cl     ┃EAX = 0001F960H  EBX = 7EFDE000H  ECX = 00000004H

          (Ⅵ)                

                mov EAX,8086   ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000000H

                mov cl,4       ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000004H

                ror EAX,cl     ┃EAX = 600001F9H  EBX = 7EFDE000H  ECX = 00000004H

          (Ⅶ)               

                mov EAX,8086   ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000000H

                                                                                                                                        mov cl,4       ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000004H

                rcl EAX,cl     ┃EAX = 0001F960H  EBX = 7EFDE000H  ECX = 00000004H

          (Ⅷ)               

                mov EAX,8086   ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000000H

                mov cl,4       ┃EAX = 00001F96H  EBX = 7EFDE000H  ECX = 00000004H

                rcr EAX,cl     ┃EAX = C00001F9H  EBX = 7EFDE000H  ECX = 00000004H

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

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

include Irvine32.inc

.data

ay dword 2,100,1

cnt word 3

.code

main proc

mov cx,cnt

mov edx,OFFSET ay

mov ebx,[edx]

mov esi,0

L1:

  mov ax,0

  push ax

  cmp bx,100

  je L2

  mov al,'N'

  call WriteChar

  jmp Quit

  L2:

      mov al,'Y'

      call WriteChar

      jmp Quit

quit:

      pop ax

      add ax,4

      add esi,4

      mov ebx,[edx+esi]

    

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

L2: 

   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 L4

     cmp ebx,edx

     jz L1

     jb L3

L3:

   inc ebx

     jmp L2

L4:

   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汽笛发出的...

东北大学计算机网络实验报告模板

课程编号B080101040计算机网络实验报告东北大学软件学院1提交要求每门设立实验的课程学生至少要提交一份实验报告提交形式为电子版可每个实验提交一份也可几个实验提交一份综合报告实验报告内容可包含实验目的实验内...

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

数值分析设计实验实验报告课题一迭代格式的比较一问题提出设方程或x2f33x10有三个实根x118793xx20347273153209现采用下面三种不同计算格式求fx0的根x13x1x2x312x33xx11x...

东北大学混流生产实验报告

东北大学本科课程综合作业实验报告课程名称生产计划与控制实验学期至学年第学期学生所在系部年级专业班级学生姓名学号任课教师实验成绩研究生部制评语注1无评阅人签名成绩无效2必须用黑色水性笔给出评语实验二混流装配生产实...

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

附录二汇编语言程序设计实验报告实验名称逻辑指令跳转指令与分支程序设计班级学号姓名日期成绩评阅人软件学院一实验目的与意义了解和掌握逻辑指令比较指令无条件有条件转移类指令的功能和作用以及此类指令的使用方法二实验环境...

东北大学_微机原理实验报告及答案_8255并行接口

微机原理实验报告专业班级姓名学号实验题目日期

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