. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
主题 : :  新的开始,开始学汇编,努力2个星期学完,这是起点!  [待解决] 回复[ 78次 ]   点击[ 2620次 ]  
ssguo
[帖 主] [ 发表时间:2010-01-27 06:30 ] 
荣誉值:0
信誉值:0
注册日期:2010-01-27 01:57
大家好,我叫勇牛!~
学习汇编的原因现在只有一个:做免杀!

因为汇编知识太差,导致我在免杀这条道路上走得十分坎坷!!!!
所以立誓一定要把汇编学好,学精!~~
从今天学起,从现在学起,今天是我的新起点!~~
发誓:不把汇编学到手,学精,誓不为人!
今后我会不断上来看我的这张贴子,把我的学习进度和学习笔记写在这里!。。。

如果半途放弃了,,那我觉得我这一生做什么事都不会成功了。。。

好了,现在去学习了。。 

我会不断更新这张贴子的。。。
                                              by 2010-1-27
                                        勇牛 注
ssguo
[第32楼] [ 回复时间:2010-01-30 21:33 ] 
荣誉值:0
信誉值:0
注册日期:2010-01-27 01:57
实验9
编程: 在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串'welcome to masm!'



分析:

绿色: 0 000 0 010b(二进制) 十六进制 02h
绿底红色:0 010 0 100(二进制)十六进制 24h
白底蓝色:0 111 0 001(二进制)十六进制 71h

2 程序要求在屏幕中间分别显示;
所以效果图应该这样:

***************************************************
*                                                 *                   
*                                                 *
*                                                 *
*                                                 *                                           
*                                                 *
*
*
*
*
*
*                 welcome to masm!
*                 welcome to masm!
*                 welcome to masm!
*
*
*
*
*
*
*
*                                                *
*                                                *
*                                                *
**************************************************
因为每行有80个字符,每个字符占2个字节(分别存放ASCIL码和属性,所以每行有160个字节;
所以,'welcome to masm!'共有16个字符所以需要32个字节来存放。


题目中写出:
" 显示缓冲器分为8(0-7)页地址从[B8000H - BFFFFH ,共32KB],在第0页( B8000H - B8F9FH 共占4000字节)显示缓冲区中:
偏移000H-09FH对应显示器上的第1行(80个字符占160个字节A0H个字节);
偏移0A0H-13FH对应显示器上的第2行;
偏移140H-1DFH对应显示器上的第3行;
依此类推,可知,偏移F00 - F9F 对应显示器上的第25行。"

现在,我们要把 'welcome to masm!' 写在第0页中,当然也可写在其它页(0 - 7 )页都可以

现在我们要写在第0页中。第0页地址从  B8000H - B8F9FH 共占4000字节而我们的需要把三行写到40000个字节的中间!
所以这个起始地址为 (4000-3*160)/2=1760 ==> 1760+(160-32)/2=1824 = 720H + B8000H = B8720H
地址为:B8720H 段地址表示为: B872H:0000H


现在可以开始写代码:

assume cs:code,ds:data

data segment
db 'welcome to masm!'
data ends

code segment

start:  mov ax,data    
     mov ds,ax
    
     mov ax,0B872H
     mov es,ax
      
     mov di,0
     mov si,0
     mov cx,16

s:   mov al,[di]   ;循环16次把welcome to masm!复制到3行
     mov es:[si],al
     mov es:[si+0A0H],al
     mov es:[si+140H],al
     add si,2
     inc di
     loop s

              
     mov si,1
     mov cx,16

s0:  mov al,02h   ;循环16次修改它们的色彩属性
     mov es:[si],al

     mov al,24h
     mov es:[si+0A0H],al

     mov al,71h
     mov es:[si+140H],al
     
     add si,2
     loop s0

     mov ax,4c00h
     int 21h
code ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved