微原软件实验二:汇编语言程序设计

2026/1/27 12:14:26

3、源程序 ①附加题

data segment count equ 256 data ends

stack segment stack 'stack' buf db 20 dup(?) stack ends

code segment assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax xor al,al mov cx,count

zrbh: mov bh,16

next:call disp ;输出字符 push ax ;入栈保护 push bx call space ;输出空格 pop bx ;出栈恢复 pop ax inc al ;自增 dec bh ;自减 jnz loop1 ;如果输出个数还不是16的倍数 push ax push bx call cr ;输出回车、换行 pop bx pop ax mov bh,16 ;重新设置bh loop1: loop next mov ah,4ch int 21h

disp proc near ;显示字符子程序

mov dl,al ;在调用之前先把要显示的字符送入al mov ah,2 int 21h ret disp endp

space proc near mov dl,20h mov ah,2 int 21h ret space endp

cr proc near mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h ret cr endp code ends end start

②习题4.1

data segment org 100h ;设置256个单元的起始地址偏移量为0100h buf1 db 256 dup(?) ;buf1的偏移量为0100h count equ $-buf1 ;得到buf1的长度 data ends stack segment stack 'stack' stack ends code segment assume cs:code,ds:data,ss:stack

start:mov ax,data ;data=076Ah,数据段基址 mov ds,ax mov si,offset buf1 ;si=0100h mov cx,count ;循环计数 xor al,al ;al清零,初始化为00h

next:mov [si],al ;将al存储到ds*4+si=077A0h inc al ;al加一

inc si ;si加一 loop next ;循环 mov ah,4ch ;程序结束 int 21h code ends end start

③习题4.2

data segment org 100h ;设置256个单元的起始地址偏移量为0100h buf1 db 256 dup(?) ;buf1的偏移量为0100h count equ $-buf1 ;得到buf1的长度 data ends stack segment stack 'stack' stack ends code segment assume cs:code,ds:data,ss:stack

start:mov ax,data ;data=076Ah,数据段基址 mov ds,ax mov si,offset buf1 ;si=0100h mov cx,count ;循环计数 xor al,al ;al清零,初始化为00h

next:mov [si],al ;将al存储到ds*4+si=077A0h inc al ;al加一 inc si ;si加一 loop next ;循环 xor bx,bx ;bx置零,bl和bh分别存放正、负元素的个数 xor dh,dh ;dh寄存器存放0元素的个数 mov si,offset buf1 ;重新将si指向buf1首地址 mov cx,count ;重新设定计数器

next2: mov al,[si] ;将当前si对应位置的数据赋给al cmp al,0 ;比较al与0的大小,有符号数的比较参见笔记5.2.2 jg plus ;正数 jl negat ;负数 jmp zero ;0

zero:inc dh ;0的个数加一 jmp next3

negat: inc bh jmp next3

plus: inc bl

next3: inc si loop next2 mov [si],dh inc si mov [si],bx mov ah,4ch int 21h code ends end start

;负数的个数加一

;正数的个数加一

;修改地址指针si

;循环

;下移一个单元 ;程序结束

④习题4.3

data segment org 100h ;设置256个单元的起始地址偏移量为0100h

buf1 db 259 dup(?) ;buf1的偏移量为0100h,256个单元存放数据,3个单元存放结果 count equ $-buf1 ;得到buf1的长度 data ends

stack segment stack 'stack' stack ends

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

start:mov ax,data ;data=076Ah,数据段基址 mov ds,ax mov si,offset buf1 ;si=0100h mov cx,count-3 ;循环计数 xor al,al ;al清零,初始化为00h

next1: mov [si],al ;将al存储到ds*16+si=077A0h inc al ;al加一 inc si ;si加一 loop next1 ;循环 xor bx,bx ;bx置零,bl和bh分别存放正、负元素的个数 xor dh,dh ;dh寄存器存放0元素的个数


微原软件实验二:汇编语言程序设计.doc 将本文的Word文档下载到电脑
搜索更多关于: 微原软件实验二:汇编语言程序设计 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219