. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验show_str,寄存器用的有点乱  [已解决] 回复[ 2次 ]   点击[ 675次 ]  
qiangzi
[帖 主]   [ 发表时间:2010-01-24 17:13 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:6
注册日期:2010-01-07 10:37
assume cs:code
data segment
  db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8
      mov dl,3
      mov cl,2
      mov ax,data
      mov ds,ax
      mov si,0
      call show_str
      mov ah,01h          ;暂停用
      int 21h
      mov ax,4c00h
      int 21h
show_str:mov ax,0B800H
         mov es,ax
         dec dh
         mov al,0a0h
         mul dh
         dec dl
         add dl,dl
         mov dh,0
         add ax,dx
         mov bx,ax
         mov ah,cl
       s:mov cl,ds:[si]
         mov ch,0
         jcxz ok
         mov ch,ah
         mov es:[bx],cx
         add bx,2
         inc si
         jmp short s
      ok:ret
code ends
end start  
 希望大家多提建议,把你们也拿出来吧,大家一块学习~~~~~~
regex
[第1楼]   [ 回复时间:2010-01-24 22:46 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
[2010-01-24 11:55] 作业:实验10.1 
================================================== 
root@yeah /cygdrive/d/asm 
$ cat lab101.asm 
assume  cs:code 

data    segment 
        db      'welcome to masm!',0 
data    ends 

code    segment 

;子程序描述 
;名称:show 
;功能:在指定位置用指定颜色显示一个用0结束的字符串 
;参数:dh=行号(0~24),dl=列号(0~79),cl=颜色 
;ds:si指向字符串首地址 
;返回:无 
show: 
        mov bx,0b800h                ;指定显示缓存区 
        mov es,bx                    ;地址 

        mov ax,0a0h                  ;将传入参数dh 
        mul dh                       ;计算为目标首 
        mov bp,ax                    ;地址,ES:BP 

        mov ah,cl                    ;颜色值 

;开始循环处理字符串并显示到指定位置 
a:      mov bl,dl                    ;将传入参数dl 
        mov bh,0                     ;作为目标地址 
        mov di,bx                    ;变量 

        mov cl,[si]                  ;检查[si]是否为 
        mov ch,0                     ;0,如是,则跳出 
        jcxz ok                      ;循环 

        mov al,[si]                  ;装入字符串 
        mov es:1[bp+di],ax           ;传送至目标地址 

        inc si                       ;增量操作   
        add dl,2                     ; 

        loop a 
ok:     ret                          ;ip出栈返回调用 

start:  mov ax,data                  ;定义数据段地址 
        mov ds,ax                    ;字符串首地址 
        mov si,0                     ;ds:si 

        mov dh,8                     ;行 
        mov dl,3                     ;列 
        mov cl,2                     ;颜色 
        call show                    ;调用子程序 

        mov ah,4ch                   ;程序返回 
        int 21h 
code    ends 
end     start 
==================================================
qiangzi
[第2楼]   [ 回复时间:2010-02-17 19:34 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:6
注册日期:2010-01-07 10:37
此贴由 贴主 于 [ 2010-02-17 19:34 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved