[2014-02-21 22:24] 课程设计2
在原始程序中,对于要安装到别处的目标程序,如果有定义了标号、变量等,在编译生成exe时,它的标号和变量都已经生成,成为“硬编码”——即offset XX生成的模样。如果目标程序开始运行时,偏移地址与安装时不同,则在之前生成的“硬编码”将无法找到意想中的地址,然而这样的状态还是经常见到的,因此,我们提供了一种解决的方法:
首先,将目标程序的内容放到原始程序的cs段起始位置,这样它的相对偏移就都是从0开始起算的(当然如果能在原始程序中计算出目标程序之前的代码长度,也可以将此代码长度加上当前内存地址作为运行时的cs段地址)。
其次,将目标程序导入内存后,调用目标程序时开始运行时,将偏移地址设为0...
首先,将目标程序的内容放到原始程序的cs段起始位置,这样它的相对偏移就都是从0开始起算的(当然如果能在原始程序中计算出目标程序之前的代码长度,也可以将此代码长度加上当前内存地址作为运行时的cs段地址)。
其次,将目标程序导入内存后,调用目标程序时开始运行时,将偏移地址设为0...
阅读全文 |
评论次数(2) |
浏览次数(478) |
所属类型(汇编作业)
[2014-02-17 23:42] 实验17,调试了半天了,终于搞定
用VMware虚拟机,winimage生成的软盘,用winhex实时查看磁盘数据,终于测试通过了!
;功能:通过逻辑扇区号对软盘进行读写int7ch中断例程
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset int7c
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset int7c_end - offset int7c
cld
rep movsb
cli
mov es:[7ch*4], 2...
;功能:通过逻辑扇区号对软盘进行读写int7ch中断例程
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset int7c
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset int7c_end - offset int7c
cld
rep movsb
cli
mov es:[7ch*4], 2...
阅读全文 |
评论次数(0) |
浏览次数(362) |
所属类型(汇编作业)
[2014-02-12 11:31] 实验15
;功能:实验15
;一直按住“A”就出现“An internal stack overflow has caused this session to be halted.”
; “Change the STACKS setting in your CONFIG.SYS file, and then try again.”
assume cs:code, ss:stack
code segment
start:
;将新中断例程复制到0:204开始的内存中
;设置源地址
mov ax, cs
mov ds, ax
mov si, offset int9
...
;一直按住“A”就出现“An internal stack overflow has caused this session to be halted.”
; “Change the STACKS setting in your CONFIG.SYS file, and then try again.”
assume cs:code, ss:stack
code segment
start:
;将新中断例程复制到0:204开始的内存中
;设置源地址
mov ax, cs
mov ds, ax
mov si, offset int9
...
阅读全文 |
评论次数(0) |
浏览次数(297) |
所属类型(汇编作业)
[2014-02-10 20:48] 实验14
;功能:获取CMOS RAM中的年月日时分秒信息
;参数:(dh)=行号,(dl)=列号,(cl)=颜色
assume cs:code, ds:data, ss:stack
data segment
f db "/", "/", " ", ":", ":", 0
b db 9, 8 ,7, 4, 2, 0
data ends
stack segment
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 0b800h
mov es, ax
...
;参数:(dh)=行号,(dl)=列号,(cl)=颜色
assume cs:code, ds:data, ss:stack
data segment
f db "/", "/", " ", ":", ":", 0
b db 9, 8 ,7, 4, 2, 0
data ends
stack segment
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 0b800h
mov es, ax
...
阅读全文 |
评论次数(0) |
浏览次数(324) |
所属类型(汇编作业)
[2014-02-08 20:16] 实验12
;功能:实验12,0号中断的处理程序,使得在处罚溢出发生时,在屏幕中间显示字符串"divide error!",
; 然后返回到DOS
assume cs:code, ds:data, ss:stack
data segment
data ends
stack segment
stack ends
code segment
start: mov ax, cs
mov ds, ax
mov si, offset do0 ;设置ds:si指向源地址
mov ax, 0
mov es, ax
mov di, 200h ;设置e...
; 然后返回到DOS
assume cs:code, ds:data, ss:stack
data segment
data ends
stack segment
stack ends
code segment
start: mov ax, cs
mov ds, ax
mov si, offset do0 ;设置ds:si指向源地址
mov ax, 0
mov es, ax
mov di, 200h ;设置e...
阅读全文 |
评论次数(0) |
浏览次数(291) |
所属类型(汇编作业)
[2014-02-08 18:00] 实验11
;功能:将data段中的以0结尾的字符串中的小写字母转变成大写字母
assume cs:code, ds:data
data segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends
code segment
start: mov ax, data
mov ds, ax
mov si, 0
call letterc
mov ax, 4c00h
int 21h
;子程序名称:letterc
;功能:将以0结尾的字符串中的小写字母转变为大写...
assume cs:code, ds:data
data segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends
code segment
start: mov ax, data
mov ds, ax
mov si, 0
call letterc
mov ax, 4c00h
int 21h
;子程序名称:letterc
;功能:将以0结尾的字符串中的小写字母转变为大写...
阅读全文 |
评论次数(0) |
浏览次数(278) |
所属类型(汇编作业)
[2014-02-07 21:50] 课程设计一
在实验七的基础上,结合实验十子程序的编写,偷懒了许多,看了看人家的,自己觉得,好像是有点偷懒的感觉。哈,不废话,上代码。
;功能:课程设计一
assume cs:code, ds:data, ss:stack
data segment
;表示21年的21个字符串,长度为84(54H)B
db '1975','1976','1977','1978','1979','1980','1981','1982'
db '1983','1984','1985','1986','1987','1988','1989','1990'
db '1991','1992','199...
;功能:课程设计一
assume cs:code, ds:data, ss:stack
data segment
;表示21年的21个字符串,长度为84(54H)B
db '1975','1976','1977','1978','1979','1980','1981','1982'
db '1983','1984','1985','1986','1987','1988','1989','1990'
db '1991','1992','199...
阅读全文 |
评论次数(0) |
浏览次数(307) |
所属类型(汇编作业)
[2014-02-07 14:52] 第十章实验子程序一在屏幕上显示字符串
;功能:在屏幕的第8行第3列,用绿色显示data段中的字符串
assume cs:code, ss:stack, ds:data
stack segment
dw 30H dup (0)
stack ends
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh, 8 ;第8行
mov dl, 3 ;第3列
mov cl, 2 ;绿色字体
mov ax, data
mov ds, ax
mov ax, stack
mov ss,...
assume cs:code, ss:stack, ds:data
stack segment
dw 30H dup (0)
stack ends
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh, 8 ;第8行
mov dl, 3 ;第3列
mov cl, 2 ;绿色字体
mov ax, data
mov ds, ax
mov ax, stack
mov ss,...
阅读全文 |
评论次数(0) |
浏览次数(303) |
所属类型(汇编作业)
[2014-02-07 10:21] 对BP寄存器的理解
通过对第十章检测点4的解决,终于明白了BP寄存器的特殊性!
mov ax, 6 ;ax = 6
call ax ;跳到1000:6
inc ax
mov bp, sp ;bp = sp的值,即sp地址fffeh
add ax, [bp] ;[bp]相当于sp地址的内容:5。 疑问:此处的[bp]应该是DS段的内容,而[sp]是SS段的内容,两者可以一定相等吗?
debug中,此处显示的是SS段中的内容!!!那这里的[bp]到底是DS段呢?还是SS段呢?
-r
AX=0000 BX=0000 CX=0010 ...
mov ax, 6 ;ax = 6
call ax ;跳到1000:6
inc ax
mov bp, sp ;bp = sp的值,即sp地址fffeh
add ax, [bp] ;[bp]相当于sp地址的内容:5。 疑问:此处的[bp]应该是DS段的内容,而[sp]是SS段的内容,两者可以一定相等吗?
debug中,此处显示的是SS段中的内容!!!那这里的[bp]到底是DS段呢?还是SS段呢?
-r
AX=0000 BX=0000 CX=0010 ...
阅读全文 |
评论次数(0) |
浏览次数(309) |
所属类型(学习笔记)