Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >汇编语言篇——顺序程序、循环程序设计

汇编语言篇——顺序程序、循环程序设计

原创
作者头像
会洗碗的CV工程师
发布于 2023-11-30 15:49:59
发布于 2023-11-30 15:49:59
4530
举报
文章被收录于专栏:LongJava学习资料LongJava学习资料

实验目的和要求

1、熟悉并掌握[BX] 和LOOP的使用;

2、掌握有多个段的程序编程、调试。

实验环境

       Dos编译器

实验内容及结果

1、 编程,向内存0:200~0:23F依次传送数据0~63(3FH)。

运行结果:

2、下面的程序的功能时将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序,上机调试,跟踪运行结果。

assume cs:code

code segment

mov ax, cs

mov ds,ax

mov ax,0020h

mov es,ax

mov bx,0

mov cx,  17h

s: mov al,[bx] ;

mov es:[bx],al

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

运行结果:

3、程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中。

assume cs:code

a segment

db 1,2,3,4,5,6,7,8

a ends

b segment

db 1,2,3,4,5,6,7,8

b ends

c segment

db 0,0,0,0,0,0,0,0

c segment

code segment

start:  mov ax,a

         mov ds,ax

         mov ax,b

         mov es,ax

         mov bx,0

         mov cx,8

s:       mov al,es:[bx]

         add [bx],al

         inc bx

         loop s

         mov ax,c

         mov es,ax

         mov bx,0

         mov cx,8

s0:     mov ax,[bx]

         mov es:[bx],ax

         add bx,2

         loop s0

         mov ax,4c00h

         int 21h

code ends

end start

运行结果:

4、程序如下,编写code段中的代码,用push 指令将a段中的钱8个字符型数据,逆序存储到b段中。

assume cs:code

a

dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends

b segment

dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

b ends

code segment

start: mov ax,a

         mov ds,ax

         mov ax,b

         mov ss,ax

         mov sp,10h

         mov bx,0

         mov cx,8

s:  push [bx]

         add bx,2

         loop s

       mov ax,4c00h

       int 21h

code ends

end start

运行结果:

实验分析

总是在sp的位置出错。害

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
汇编语言_汇编语言程序
开头和结尾的两句代表伪指令 只有编译器可以读懂 汇编指令可以被翻译为机器码最终被cpu执行 汇编程序 就是包含汇编指令和伪指令的文本 mov ax,4c00h int 21h 跟C语言程序的return 0一样 返回控制权 一个汇编程序是由多个段组成的 这些段被用作各种空间来使用 一个有意义的汇编程序至少需要一个段 且每个段都需要段名 段名 segment--段的开始 段名 ends--段的结束 assume假设 含义是假设某一段寄存器和程序中我们定义的段名关联起来 可以理解为和变量的引用一个意思
用户7272142
2023/11/14
2680
汇编语言_汇编语言程序
【汇编语言】直接定址表(一)—— 「从单元标号到跨段数据:解锁汇编语言的隐藏技巧」
比如:下面的程序将code 段中的a标号处的8个数据累加,结果存储到b标号处的字中。
Crossoads
2025/01/20
1610
汇编语言篇——转移指令的原理
1、 将教材中相关程序上机调试,用Debug 跟踪其执行过程,理解转移指令的原理。
会洗碗的CV工程师
2023/11/30
2760
汇编语言篇——转移指令的原理
汇编语言篇——寻址方式
1、 将教材中所有讲解过的程序上机调试,用Debug 跟踪其执行过程,进一步理解不同的寻址方式。(以教材问题7.9的程序为例子:)
会洗碗的CV工程师
2023/11/30
2390
汇编语言篇——寻址方式
汇编语言第三版答案(王爽)
汇编语言答案(王爽)  此文只是用来存个档,不喜勿喷 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte。 (4)1GB是 1073741824 (2^30) 个Byte、1MB是 1048576(2^20) 个Byte、1KB是 1024(2^10)个Byte。 (5)8080、8088、80296、80
Angel_Kitty
2018/04/17
2.5K0
汇编基础
​ cup与所有内存之间:地址总线,数据总线,控制总线,每条线对应不同信息,指令与数据分开
Dean0731
2020/08/17
1.5K0
8086汇编语言——使用数据段和栈段
;编写程序将data1段和data2段中的字节型数据依次相加,将结果存在data3段中。 ;ds保存data1的段地址,es保存data2的段地址,ss保存data3的段地址。 ;db用来定义字节型数据,这里定义了5个连续的字节型数据。 assume cs:code data1 segment db 1,2,3,4,5 data1 ends data2 segment db 6,7,8,9,10 data2 ends data3 segment db 0,0,0
zy010101
2020/10/10
2.4K0
8086汇编语言——使用数据段和栈段
8086汇编语言——双层循环的使用
;编程,将data段的每个单词的前四个字母改写为大写。 assume cs:code stack segment dw 10 dup(10) stack ends data segment db '1. display ' db '2. brows ' db '3. replace ' db '4. modify ' data ends code segment start: mov ax,stack m
zy010101
2020/10/10
1.1K0
8086汇编语言——双层循环的使用
(六)汇编语言——包含多个段的程序
目录 使用数据 使用栈 分段  代码 总结 ---- 使用数据         首先,我们来看一个问题,就是编程计算0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H的和,结果存在ax寄存器中。看起来还是比较简单的,用简单的加法指令可以完成,但是这样会有一个问题,就是我们的程序和代码就是混在一起的,不仅导致程序混乱,也让人难以理解。         我们在使用C语言的时候,知道可以定义一个数组来解决这样的问题,但是在汇编中也没有数组啊,这可怎么办,别急,我们
小点点
2023/01/01
4180
(六)汇编语言——包含多个段的程序
(十)汇编语言——CALL和RET指令
而如果转移地址在寄存器里面的话,就有一点不一样了,但是和我们之前介绍的 jmp 指令类似的,我们具体看看吧!就相当于下面的语句。
小点点
2023/02/01
1.4K0
【汇编】(六)[BX] 和 Loop 指令
我们要完整地描述一个内存单元,需要两种信息: (1)内存单元的地址; (2)内存单元的长度(类型);
sidiot
2023/08/31
2890
【汇编】(六)[BX] 和 Loop 指令
8086汇编语言——处理字符串
;将'basic'转成大写'BASIC' ;将'ASM'转成小写'asm' assume cs:code data segment db 'basic' db 'ASM' data ends code segment start: mov ax,data mov ds,ax ;设置ds指向data mov bx,0 ;设置偏移地址 mov cx,5 ;循环5次 s1: mov al,[bx]
zy010101
2020/10/10
8660
8086汇编语言——处理字符串
8086汇编语言——操作内存中的数据
;编程计算0000h:0000h内存单元中数据乘以3的结果,结果保存在dx中。 ;本次计算的一个字节单元中的数据,它是8位的。所以需要使用8位的寄存器取值。 ;这个内存单元中的数据最大可能是255,255×3的结果会超出8位,所以运算的时候,需采用16位寄存器。 ;当然,最终结果也要保存在16位寄存器之中。 assume cs:code code segment mov ax,0000h mov ds,ax ;段地址 mov bx,0000h
zy010101
2020/10/10
1.1K0
8086汇编语言——操作内存中的数据
(七)汇编语言——更灵活的定位内存地址的方法
        我们只需要知道,这三种写法的效果是相同的就行,因为这三个寄存器的作用是相似的。
小点点
2023/01/07
5630
(七)汇编语言——更灵活的定位内存地址的方法
内存寻址方式
在处理汇编语言程序中,用'.......'的方式指明数据是以字符的形式给出的 编译器将他们转化为他们对应的ascii码 通过ascii码表我们可以发现同一个大写和小写字符相差20h
用户7272142
2023/11/24
2590
内存寻址方式
王爽汇编语言实验16
代码写完之后发现结果不对,调试一下发现问题出在int7c的中断例程中 call word ptr table[bx] 这一句。 程序首先进行编译,这时候table实际上就被替换为了一个地址,然后再执行程序的时候,这个错误的地址和程序一块被拷贝到了0:200开始的内存中,所以执行程序的时候会出问题。 要解决这个问题需要在要拷贝的程序前添加一句 org 200h,告诉编译器,在编译的时候就把后面这段程序当做存在0:200处,这样一些标号的地址就是我们想要的正确地址。
yifei_
2022/11/14
3610
【汇编语言】更灵活的定位内存地址的方法(三)—— 不同的寻址方式的灵活应用
如果我们比较一下前面用到的几种定位内存地址的方法(可称为寻址方式),就可以发现有以下几种方式:
Crossoads
2024/11/21
1220
【汇编语言】更灵活的定位内存地址的方法(三)—— 不同的寻址方式的灵活应用
(五)汇编语言——[bx]和loop指令
目录 [...]与(...) [...] (...) idata Loop指令 段前缀 总结 ---- [...]与(...) [...]         这个我们其实见过,代表的是一个内存单元,段地址在DS中,偏移地址就是[bx]。 (...)         这个是表示一个内存单元或寄存器中的内容,但是千万要注意,这个是人为规定的,不是汇编语法,上面那个是汇编语法。         比如:movax,[2],这个指令,用()来表示就是:(ax)=((ds)*16+2)。 idata
小点点
2022/12/28
6270
(五)汇编语言——[bx]和loop指令
《汇编语言》课程设计2
jz指令:https://zhidao.baidu.com/question/564008138.html
Hk_Mayfly
2019/07/30
8380
【汇编】(七)包含多个段的程序
考虑这样一个问题,编程计算以下8个数据的和,结果存在 ax 寄存器中: 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H;
sidiot
2023/08/28
2540
相关推荐
汇编语言_汇编语言程序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档