第一次作业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的值时,下一条指令也会被执行
使用栈空间时,不同顺序的压入和弹出操作会导致数据所在的内存空间发生改变