欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

我的第四个汇编实验报告

我的第四个汇编实验报告

[SIZE="4"]实验4  [BX]和loop的使用
(1)  编程,向内存0:200~0:23F依次传送数据0~63(3FH).  
      ;----------------------------------------------
      ;ex5-1.asm
      ;-----------------------------------------------
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      assume cs:code      ;;
      code segment      ;;
              mov ax,20h        ;;
                 mov ds,ax        ;;
              mov bx,0        ;;
      mov ax,0      ;;
              mov cx,0ffh      ;;
              s: mov [bx],ax      ;;
               inc bx        ;;
      inc ax        ;;
                loop s        ;;
                  mov ax,4c00h      ;;
                 int 21h        ;;
      code ends        ;;
      end            ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(2)  编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“MOV AX,4C00H”和“INT 21H”。
    ;-------------------------------------------
    ;ex5-2.asm
    ;-------------------------------------------
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    assume cs:code        ;
    code segment          ;
            mov ax,20h        ;
              mov ds,ax        ;
               mov bx,0          ;
              mov cx,0ffh        ;
          s: mov [bx],bx        ;
              inc bx          ;
              loop s          ;
              mov ax,4c00h        ;
              int 21h          ;
    code ends          ;
    end              ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(3)  下面的程序的功能是将“MOV AX,4C00H”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
;------------------------------------------------
;;ex5-3.asm
;------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
assume cs:code        ;;;;;
code segment        ;;;;;
  mov ax,code      ;;;;;
  mov ds,ax      ;;;;;
  mov ax,0020h      ;;;;;
  mov es,ax      ;;;;;
  mov bx,0        ;;;;;
  mov cx,18h      ;;;;;
  s:mov al,[bx]      ;;;;;
  mov es:[bx],al      ;;;;;
  inc bx        ;;;;;
  loop s        ;;;;;
  mov ax,4c00h      ;;;;;
  int 21h        ;;;;;
code ends          ;;;;;
end            ;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              1.把EX5-3.EXE加载入内存中
$debug ex5-3.exe
-r
AX=0000 BX=0000 CX=001D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=13C7 ES=13C7 SS=13D7 CS=13D7 IP=0000  NV UP EI PL NZ NA PO NC
13D7:0000 B8D713     MOV AX,13D7
-u 
13D7:0000 B8D713    MOV   AX,13D7
13D7:0003   8ED8    MOV   DS,AX
13D7:0005 B82000    MOV   AX,0020  
13D7:0008 8EC0      MOV   ES,AX
13D7:000A BB0000    MOV   BX,0000
13D7:000D B91800    MOV   CX,0018
13D7:0010 8A07      MOV   AL,[BX]
13D7:0012 26      ES:
13D7:0013 8807      MOV   [BX],AL
13D7:0015 43      INC   BX
13D7:0016 E2F8      LOOP  21
13D7:0018 B8004C    MOV   AX,4C00
13D7:001D 00FF      ADD  BH,BH
13D7:001F 50      PUSH  AX
            2.把0:200的内容反汇编结果如下:
13D7:000D B91800    MOV   CX,0018
13D7:0010 8A07      MOV   AL,[BX]
13D7:0012 26      ES:
13D7:0013 8807      MOV   [BX],AL
13D7:0015 43      INC   BX
13D7:0016 E2F8      LOOP   0010
13D7:0018 B8004C  MOV   AX,4C00
13D7:001B CD21         INT          21
13D7:001D 00FF       ADD      BH,BH
13D7:001F 50      PUSH    AX
-u 0:200
0000:0200 46      INC    SI
0000:0201 07      POP    ES
0000:0202 07      ADC  [BP+SI],AL
0000:0204 0A04        OR    AL,[SI]
0000:0206 1002        ADC  [BP+SI],AL
0000:0208 3A00       CMP  AL,[BX+SI]
0000:020A A30354      MOV  [5403],AX
0000:020D 00A3036E  ADD   [BP+DI+6E03],AH    
0000:0301 00A30388  ADD  [BP+DI+8803],AH
0000:0305 00A303A2  ADD  [BP+DI+A203],AH
0000:0309 00A303FF  ADD  [BP+DI+FF03],AH
0000:0303 0310      ADD  DX,[BX+SI]
0000:030F 02A90810  ADD   CH,[BX+DI+1008]
-
              3.运行程序至正常结束
13D7:001D 00FF         ADD  BH,BH
13D7:001F 50        PUSH    AX
-u 0:200
0000:0200 46        INC    SI
0000:0201 07        POP    ES
0000:0202 07        ADC  [BP+SI],AL
0000:0204 0A04          OR    AL,[SI]
0000:0206 1002         ADC  [BP+SI],AL
0000:0208 3A00         CMP  AL,[BX+SI]
0000:020A A30354    MOV  [5403],AX
0000:020D 00A3036E    ADD   [BP+DI+6E03],AH    
0000:0301 00A30388    ADD  [BP+DI+8803],AH
0000:0305 00A303A2    ADD  [BP+DI+A203],AH
0000:0309 00A303FF    ADD  [BP+DI+FF03],AH
0000:0303 0310         ADD  DX,[BX+SI]
0000:030F 02A90810    ADD   CH,[BX+DI+1008]
-g 1d
Program terminated normally
-

          4.再次将0:200的内容反汇编结果如下:
0000:0301 00A30388    ADD  [BP+DI+8803],AH
0000:0305 00A303A2    ADD  [BP+DI+A203],AH
0000:0309 00A303FF    ADD  [BP+DI+FF03],AH
0000:0303 0310         ADD  DX,[BX+SI]
0000:030F 02A90810    ADD   CH,[BX+DI+1008]
-g 1d
Program terminated normally
-u 0:200
0000:0200 B8D713     MOV  AX,13D7
0000:0203 8ED8      MOV  DS,AX
0000:0205 B82000    MOV  AX,0020
0000:0208 8EC0      MOV  ES,AX
0000:020A BB0000     MOV  BX,0000
0000:020D B91800     MOV  CX,0018
0000:0210 8A07      MOV  AL,[BX]
0000:0212 26      ES:    
0000:0213 8807      MOV  [BX],AL
0000:0215 41       INC    BX
0000:0216   E2F8    LOOP   0210
0000:021B CD21      INT    21
0000:021D 0AC4      OR    AL,AH
0000:021F 5E      POP    SI

对比图1和图4,我们可以看出mov ax,4c00h前的指令序列已经被复制到了0:200处
实验总结:经过这次实验,我掌握了如何将一段内存的数据复制到另一段内存中去,以及如何将程序自身的指令序列复制到另一段内存中去.掌握了如何优化程序来将内存的内容复制到另一段内存去。
这次实验,花费我大量的时间和心血,终于完成了。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功