汇编网首页登录博客注册
cncser的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
文章收藏
友情链接

[2014-02-21 22:24] 课程设计2

点击查看原图
在原始程序中,对于要安装到别处的目标程序,如果有定义了标号、变量等,在编译生成exe时,它的标号和变量都已经生成,成为“硬编码”——即offset XX生成的模样。如果目标程序开始运行时,偏移地址与安装时不同,则在之前生成的“硬编码”将无法找到意想中的地址,然而这样的状态还是经常见到的,因此,我们提供了一种解决的方法:
首先,将目标程序的内容放到原始程序的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...
阅读全文 | 评论次数(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
        ...
阅读全文 | 评论次数(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
...
阅读全文 | 评论次数(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...
阅读全文 | 评论次数(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结尾的字符串中的小写字母转变为大写...
阅读全文 | 评论次数(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...
阅读全文 | 评论次数(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,...
阅读全文 | 评论次数(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  ...
阅读全文 | 评论次数(0) | 浏览次数(309) | 所属类型(学习笔记)