汇编实验二:数据的建立与传送程序

汇编实验二:数据的建立与传送程序

问题

数据的建立与传送程序:

  1. 在内存10000H单元开始,建立00H~0FH~00H 31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小。该程序从内存CS:0100H地址开始输入。
          MOV    AX, 1000H
            MOV    DS, AX
            MOV    SI, 0
            MOV    CL, 0FH
            XOR    AX, AX
    PPE1: MOV    [SI], AL
            INC     SI
            INC     AL
            DEC     CL
            JNZ     PPE1
            MOV    CX, 10H
     PPE2: MOV    [SI], AL
            INC     SI
            DEC     AL
            LOOP   PPE2
            INT     20H

汇编语言Dos 下debug

问题一

该程序从内存CS:0150H开始输入。把数据块传送到15050H开始的存贮区域中。

 MOV     AX, 1000H
           MOV     DS, AX
           MOV     SI, 0
           MOV     DI, 5050H
           MOV     CX, 1FH         ; 数据块长度是31
PPEA:    MOV     AL, [SI]
           MOV     [DI], AL
           INC      SI
           INC      DI
           LOOP    PPEA
           INT      20H

问题二

用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:0200H开始输入。
根据:
MOVSB|MOVSW
;串传送:ES:[DI]←DS:[SI]
;然后:SI←SI±1/2,DI←DI±1/2
DF=0(执行CLD指令):地址指针增加(+)

    MOV AX,1515  ; 目的段地址
    MOV ES,AX; 立即数不能直接送到段寄存器
    MOV AX,1000; 源数据段地址
    MOV DS,AX
    MOV AX,0
    MOV DI,AX
    MOV SI,AX
    MOV CX,1E; 数据长度为31
    CLD ;地址指针增加
L1  MOVSB
    LOOP L1

问题三

用重复串操作指令“REP MOVSB”把数据块传送到15250H开始的区域。该程序从CS:250H地址开始输入
根据:
MOVSB|MOVSW
;串传送:ES:[DI]←DS:[SI]
;然后:SI←SI±1/2,DI←DI±1/2
DF=0(执行CLD指令):地址指针增加(+)
REP
;执行一次串指令,CX减1;直到CX=0

    MOV AX,1525  ; 目的段地址
    MOV ES,AX; 立即数不能直接送到段寄存器
    MOV AX,1000; 源数据段地址
    MOV DS,AX
    MOV AX,0
    MOV DI,AX
    MOV SI,AX
    MOV CX,1E; 数据长度为31
    CLD ;地址指针增加
    REP MOVSB

问题四

( 用串操作的减量工作方式,把数据块传送到25050H开始的区域。该程序从CS:0300H开始输入。
根据:
MOVSB|MOVSW
;串传送:ES:[DI]←DS:[SI]
;然后:SI←SI±1/2,DI←DI±1/2
DF=1(执行STD指令):地址指针减小(-)
REP
;执行一次串指令,CX减1;直到CX=0

    MOV AX,2505  ; 目的段地址
    MOV ES,AX; 立即数不能直接送到段寄存器
    MOV AX,1000; 源数据段地址
    MOV DS,AX
    MOV AX,1E
    MOV DI,AX
    MOV SI,AX
    MOV CX,1E; 数据长度为31
    STD ;地址指针增加
    REP MOVSB
    
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这里是一个简单的 8086 汇编语言程序,用于控制 8255 并行接口进行实验: ``` ;8255并行接口实验 ;端口地址定义 port_a equ 0a000h ;8255的端口A port_b equ 0a001h ;8255的端口B port_c equ 0a002h ;8255的端口C control_word equ 0a003h ;8255的控制字 ;数据段定义 data segment msg1 db '8255并行接口实验', '$' msg2 db '输入0-255之间的数,按回车键结束', '$' msg3 db '输出数据为:$' num db 0 temp db 0 data ends ;代码段定义 code segment start: ;初始化控制字 mov al, 82h ;将控制字的值放入AL寄存器 out control_word, al ;输出控制字到控制字端口 ;显示欢迎信息 mov ah, 09h ;设置功能号为09h,显示字符串 lea dx, msg1 ;将msg1的首地址放入DX寄存器 int 21h ;调用DOS中断21h,显示msg1 ;显示输入提示信息 mov ah, 09h ;设置功能号为09h,显示字符串 lea dx, msg2 ;将msg2的首地址放入DX寄存器 int 21h ;调用DOS中断21h,显示msg2 ;读取用户输入的数字 mov ah, 01h ;设置功能号为01h,等待用户输入 int 21h ;调用DOS中断21h,等待用户输入 sub al, 30h ;将输入的字符转换为数字 mov temp, al ;将转换后的数字存入temp变量 mov ah, 02h ;设置功能号为02h,显示字符 mov dl, al ;将输入的数字存入DL寄存器 int 21h ;调用DOS中断21h,显示输入的数字 ;读取用户输入的数字 mov ah, 01h ;设置功能号为01h,等待用户输入 int 21h ;调用DOS中断21h,等待用户输入 sub al, 30h ;将输入的字符转换为数字 mov num, al ;将转换后的数字存入num变量 mov ah, 02h ;设置功能号为02h,显示字符 mov dl, al ;将输入的数字存入DL寄存器 int 21h ;调用DOS中断21h,显示输入的数字 ;将输入的数字存入端口A mov al, temp ;将temp变量中的数值放入AL寄存器 out port_a, al ;将AL寄存器中的数值输出到端口A ;将输入的数字存入端口B mov al, num ;将num变量中的数值放入AL寄存器 out port_b, al ;将AL寄存器中的数值输出到端口B ;从端口C读取数据并显示 in al, port_c ;从端口C读取数据 mov ah, 09h ;设置功能号为09h,显示字符串 lea dx, msg3 ;将msg3的首地址放入DX寄存器 int 21h ;调用DOS中断21h,显示msg3 mov dl, al ;将读取的数据存入DL寄存器 add dl, 30h ;将数字转换为字符 mov ah, 02h ;设置功能号为02h,显示字符 int 21h ;调用DOS中断21h,显示读取的数据 ;程序结束 mov ah, 4ch ;设置功能号为4ch,程序结束 int 21h ;调用DOS中断21h code ends end start ``` 这个程序首先初始化了 8255 并行接口的控制字,然后显示欢迎信息和输入提示信息,并等待用户输入两个数字。接着,程序将输入的数字存入 8255 的端口 A 和端口 B,然后从端口 C 读取数据并显示出来。最后,程序结束。 需要注意的是,这个程序只是一个简单的示例,仅用于演示如何使用 8255 并行接口。实际的应用场景可能更加复杂,需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值