汇编在dos下显示字符串的子程序

assume cs:code,ss:stack,ds:data

data segment
    db ‘welcome to masm‘,‘0‘
data ends

stack segment
    dw 8 dup (0)
stack ends

code segment
start:
    mov dh,8
    mov dl,3
    mov cl,2
    mov ax,data
    mov ds,ax
    mov si,0
    mov ss,stack
    call show_str

    mov ax,4c00h
    int 21h

show_str: //显示字符串的子程序
    push ax
    push cx
    push dx
    push ss
    push si//现场的保留

    mov ax,0b800h
    mov es,ax
    mov di,0

    mov al,0a0h
    dec dh
    mul dh
    mov bx,almov al,2
    dec dl
    mul dl
    add bx,al
//计算要显示的位置的偏移地址,且用的是ax寄存器的低八位

    mov al,ch
s:
    mov ch,0
    mov cl,ds:[di]
    jcxz ok//判断读入的字符是不是0
    mov ch,al
    mov es:[bx+si],cx

    inc di
    add si,2

jmp short s

ok:
    pop si
    pop ss
     pop dx
    pop cx
    pop ax
    ret//回复现场

end start
code ends

王爽老师书上的实验10.1。

				
时间: 2024-10-29 04:03:13

汇编在dos下显示字符串的子程序的相关文章

实验10 编写子程序 1.显示字符串

assume cs:code,ds:data data segment db 'Welcome to masm!',0 data ends code segment start: mov dh,8 ;dh表示行号(范围:1-25) mov dl,3 ;dl表示列号(范围:1-80)[注:每超过80等于行号自动加1] mov cl,2 ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性) mov ax,data mov ds,ax mov si,0 call show_str mov ax,4c

x8086汇编实现dos清屏(clear screen)

题目要求:x8086汇编实现dos下的清屏功能 80X25彩色字符模式显示缓冲区的结构: 在内存地址结构中,B8000H~BFFFFH共32KB的空间,为80x25彩色字符模式的显示缓冲区.向这个地址空间写入数据,写入的内容将立即出现在 显示器上. 在80x25彩色模式下,显示器可以显示25行,每行80个字符,每个字符可以由256中属性. 80x25模式下,一屏的内容在显示缓冲区共4000个字符. 字母:  ascii 0 为 NUL, 字符解释-->空 颜色:  0  即将前景色和背景色都设置

显示字符串

字符串中断 通过AH=13H中断来显示字符串. BIOS中断定义如下 入口参数: AH=13H //在Teletype模式下显示字符串 BH=页码 BL=属性.背景色和文字颜色(若AL=00H或01H) CX=显示字符串长度 (DH.DL)=坐标(行.列) ES:BP=显示字符串的地址 AL=显示输出方式 0--字符串中只含显示字符,其显示属性在BL中.显示后,光标位置不变 1--字符串中只含显示字符,其显示属性在BL中.显示后,光标位置改变 2--字符串中含显示字符和显示属性.显示后,光标位置

Java Mail---SMTP、POP3协议-DOS下手动收发邮件演示过程

转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] E-Mail协议简介: 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器. 发送邮件的服务器使用发送协议,现在常用的是SMTP协议.所以,通常发邮件的服务器也称为SMTP服务器. 接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3或IMAP服务器. 目前经常见到的服务器为SMTP和POP3服务器.如大家在注册了

汇编题目:在DOS下,按F1键后改变当前屏幕的显示颜色

我们都知道int9中断是键盘的按键中断程序,按下键盘触发int9中断,不懂int9中断的请自己去百度查查说明和用法 利用中断任务安装一个新的int 9中断例程,功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理. ;任务:安装一个新的int 9中断例程, ;功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理. assume cs:code stack segment db 30h dup(0) stack ends data segment db 20h du

汇编|使用10h中断来显示字符串

特么这个问题困扰了我好久,毕竟是个OS newbie,还没有汇编的基础. 在前天的加载loader的实验中,老师要求显示字符串,但是给的代码只是显示一个字符. 愚蠢的我实在没办法,最后为了按期完成实验,只能一个个字符地输出,呀真是羞耻. 好了,趁着清明假期,花了几个小时终于弄懂了. 下面进入正题! 前戏是先对boot.asm和loader.asm编译: nasm -o boot.bin boot.asm nasm -o loader.bin loader.asm 然后把boot.bin写入软盘a

(练手备忘)汇编实现将输入的字符串中的空格去掉后反序输出

功能:任意输入一个字符串,去掉其中的空格后反序输出 注:使用 int 21h 里的 0AH 功能 输入一个字符串时,字符串的第一个字节存储的是字符串的最大长度,第二个字节存储的是实际读入字符的个数 编译器使用的是MASMPlus ;#Mode = DOS MAXLEN = 64 ;设置字符串的最大长度 SPACE = ' ' ;空格 datasg segment buffer db MAXLEN+1,0,MAXLEN+1 dup(0) ;字符串输入缓冲区 string db MAXLEN+3 d

【转】Windows内核下操作字符串!

* Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject) { KdPrint(("DriverUnload Load...\n")); } //==================================================

[C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器

作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.html).如今为了兼容Turbo C++ 3等DOS下的编译器,做了重大改变,不再适合沿用旧名,于是采用了zlstdint这个新名. 一.用法简介 用法很简单——把z_stdint.h.z_inttyp.h这2个文件放到你的项目中,便可以正常的使用C99整数类型及相关的宏了. 范例代码—— #defin