第一次作业201983290152王毓国

任务二:

(1)使用d命令查看生产日期

 

 

 (2)使用e命令修改生产日期所在内存单元,并用d命令再次查看:

 

 

 (3)结论:无法修改,因为ROM是可读存储器,无法修改数据

任务三:

(1)使用e命令修改内存单元:

 

 

 (2)使用f命令批量填充内存单元:

 

 

 (3)修改内存单元和数据:

 

 

 

 

 

 任务四:

(1)填空

mov ax, 20
mov ds, ax
mov ss, ax
mov sp, 30
push [0] ; 执行后,寄存器(sp) = 002E
push [2] ; 执行后,寄存器(sp) = 002C
push [4] ; 执行后,寄存器(sp) = 002A
push [6] ; 执行后,寄存器(sp) = 0028
pop [6] ; 执行后,寄存器(sp) = 002A
pop [4] ; 执行后,寄存器(sp) = 002C
pop [2] ; 执行后,寄存器(sp) = 002E
pop [0] ; 执行后,寄存器(sp) = 0030

(2)栈顶的逻辑地址为:0020:0030 物理地址为00230H

执行至PUSH[6],使用d命令查询:

 

 

 

 

 

 (3)POP[0]指令结束后,此时数据空间内容没有变化

 

 

 (4)更改指令顺序后,此时数据空间内有变化(按字来看,顺序相反)

 

 

 任务五:

(1)使用t命令单步执行mov ss, ax时,并没有在执行完毕后立即停止,而是继续执行了mov sp,30指令,因为debug的t指令在执行修改寄存器ss的指令时,下一条指令也紧接着被执行

(2)黄下划线表示的为CS:IP,在数据进栈时,存储位置也同时改变

任务六:

(1)补全后的代码:

assume cs:code
 
 code segment
 start:
         mov cx, 10
         mov dl, '0'
 s:      mov ah, 2
         int 21h
         add dl, 1
         loop s
 
         mov ah, 4ch
         int 21h
 code ends
 end start

使用d命令,查看程序段前缀,为CD 20:

 

 

 任务七:

(1)补全代码:

assume cs:code
 code segment
         mov ax, cs
         mov ds, ax
         mov ax, 0020h
         mov es, ax
         mov bx, 0
         mov cx, 17h
 s:      mov al, [bx]
         mov es:[bx], al
         inc bx
         loop s
 
         mov ax, 4c00h
         int 21h
 code ends
 end

第一个空填cs,表示cs:ip指向将要执行的指令

第二个空填17h,表示task7.asm中line3-line12的代码占据了17h的内存单元

(2)使用g命令运行

 

 

 实验总结:

通过本次实验,我了解:到不能向ROM存储器进行写操作

在使用t命令修改ss的值时,下一条指令也会被执行

使用栈空间时,不同顺序的压入和弹出操作会导致数据所在的内存空间发生改变

posted @ 2021-10-24 23:16  WWwwwwwa!  阅读(160)  评论(2)    收藏  举报