高分!!循环程序设计 汇编

高分!!循环程序设计 汇编,第1张

本程序经陪芹敏过masm5.0调试,运行通过

Data segment

Buf db 26,47,0,-69,-89,35,0,-46,57,-68,-51,-81,98,-43,0,56,-67,123,-98,0,102,-87,24,67,?,?,?

String db'Press any key to continue...',0ah,0dh,'$'

-------------------------------------

Data ends

Code Segment

Assume CS:Code,DS:Data

Start: mov ax,Data

push ax

pop ds数据段地址给ds

mov si,offset Buf 取数组变量的偏移地址给si

mov al,[si] 数组元素个数送给al

inc si使指针si指向下一个元素

sub al,3 除去用于存放统计个数首咐的三个字节单元

xor ah,ah 高位清零

xor dl,dl dl计算0的个数

xor bx,bx BH用来存正数的个数,BL用来存芦枝负数个数

mov cx,ax 元素个数

next:mov al,[si] 读入一个字节数据送给al

Test al,al 试与(and),不返回结果,只根据结果置标志位,al是否为0

jnz a001 不是0,跳到a001判断是否为负数

inc dl 为0,dl加1

jmp EXit_loop无条件跳转到EXit_loop,结束本次循环

a001: js a002判断是否为负数

inc bh 不是负数,bh计数器加1

jmp EXit_loop无条件跳转到EXit_loop,结束本次循环

a002: inc bl 负数计数

EXit_loop:inc si偏移地址加1

loop next

mov [si],bh 正数的个数存入[si]

mov [si+1],bl 负数的个数存入[si+1]

mov [si+2],dl 零的个数存入[si+2]

lea dx,String 输出执行完成,按任意键继续

mov ah,9

int 21h

mov ah,1暂停

int 21h

mov ah,4ch 返回DOS,结束程序

int 21h

Code ENDS 代码段结束

END Start

退出loop循环后

寄存器变化如下:

AX=0043 BX=090A CX=0000 DX=0004 SP=0000 BP=0000 SI=0018 DI=0000

DS=0BCA ES=0BBA SS=0BCA CS=0BCE IP=0034 NV UP EI PL NZ NA PE NC

0BCE:0034 8D161B00 LEA DX,[001B] DS:001B=7250

数据段中内容

-d ds:00 1a

0BCA:0000 1A 2F 00 BB A7 23 00 D2-39 BC CD AF 62 D5 00 38

0BCA:0010 BD 7B 9E 00 66 A9 18 43-09 0A 04

最后三个字节09 0A 04

为数据区中数据的正数、负数和零的个数

9、每段的起始和结束地址为:

(1)10000H-1FFFFH

(2)12340H-2233FH

(3)23000H-32FFFH

(4)E0000H-EFFFFH

(5)AB000H-BAFFFH

12、若当前SS=3500H,SP=0800H,堆栈段在存储器中的物理地址为35800H,若此时入栈10个字节,SP内容是07F6H,若再出裂埋栈6个字节,SP为07FCH

3、

(1)MOV

AX,[100H]源 *** 作数字段的寻址方式是直接寻址,物理地址值是

10100H

(2)MOV

AX,VAL源 *** 作数字段的寻址方式是直接寻址,物理地址值是

10030H

(3)MOV

AX,[BX]源 *** 作数字段的寻址方式是寄存器间接寻址,物理地址值是

10100H

(4)MOV

AX,ES:[BX]源 *** 作数字段的寻址方式是寄存器间接寻址,物理地址值是

20100H

(5)MOV

AX,[SI]源 *** 作肆手蚂数字段的寻址方式是寄存间接寻址,物理地址值是

100A0H

(6)MOV

AX,[BX+10H]源 *** 作数字段的寻址方式是寄存器相对寻址,物理地址值是

10110H

(7)MOV

AX,[BP]源 *** 作数字段的寻址方式是寄存器间接寻址,物理地址值是

35200H

(8)MOV

AX,VAL[BP][SI]源 *** 作数字段的寻址方式是基址变址寻址,物理地址值是

10100H

(9)MOV

AX,VAL[BX][DI]源 *** 作数字段的寻址方式是基址变址寻址,物理地址值是

10124H

(10)MOV

AX,[BP][DI]源 *** 作数字段的寻址方式是基址变址寻址,物理地址值是

35224H

6、

(1)MOV

DL,AX类型不匹配,字节与字不能传送

(2)MOV

8650H,AX

目的 *** 作数不能为立即数

(3)MOV

DS,0200H

立即数不能送段寄存器

(4)MOV

[BX],[1200H]

两内存单元不能直接 *** 作

(5)MOV

IP,0FFH *** 作数不能为IP

(6)MOV

[BX+SI+3],IP

*** 作数不能为IP

(7)MOV

AX,[BX][BP]两个基寄存器不能同时作为地址

(8)MOV

AL,ES:[BP]

可以是正确的

(9)MOV

DL,[SI][DI]两变址寄存器不能同时作为地址

(10)MOV

AX,OFFSET

0A20H错误在OFFSET不用作为数值地址 *** 作符

(11)MOV

AL,OFFSET

TABLE类型不匹配,地址为字,不能传送给字节

(12)XCHA

AL,50H

立即数不用作为XCHG指令的 *** 作数

(13)IN

BL,05H

输入指令为累加器专用指令,不用BL,只能用AL

(14)OUT

AL,0FFEH

端口地址超过8位应该用DX间接寻址

7、

LEA

BX,TABLE

MOV

AL,5

XLAT

MOV

DH,AL

MOV

AL,7

XLAT

MOV

DL,AL

MOV

BX,DX

8、

PUSH

AX

SP=00FEH

PUSH

BX

SP=00FCH

POP

BX

SP=00FEH

POP

AX

SP=0100H

1、

A1

DW

23H,

5876H

变量占4个字节

A2

DB

3

DUP(?),

0AH,

0DH,

‘$’变量占6个字节

A3

DD

5

DUP(1234H,

567890H)

变量占40个字节

A4

DB

4

DUP(3

DUP(1,

2,

‘ABC’))

变量占60个字节

2、

MOV

AX,0066H

MOV

AL,0FFH

MOV

AX,0FFH

AND

AL,2

OR

AX,02FFH

4、

PLENTH的值为22,表示PLENTH与PAR之间的字节数

7、用1024×1位的RAM芯片组成薯型16K×8位的存储器,需要128个芯片,在地址线中有10位参与片内寻址,6位组合成片选择信号(设地址总线为16位)

8、现有一存储体芯片容量为512×4位,若要用它组成4KB的存储器,需要16个这样的芯片,每块芯片需要9条寻址线,整个存储系统最少需要12条寻址线。

基本信息 作者: 朱耀庭丛书名: 高等学校应用型特色规划教材 出版社:清华大学出版社 ISBN:9787302202967 上架时间:2009-6-24 出版日期:2009 年6月 开本:16开 页码:387 本书针对80x86微处理器,详细论述了汇编语言程序设计的方法。其主要内容包括:计算机中数的表示,bit在数字化信息时代的地位,从学习高级语言到学习汇编语言思维模式的转变,PC机引导机制,8086/8088的指令系统,汇编语言程序设计的基本方法,DOS和BIOS内部功能的调用方法,I/O设备端U编程方法,典型中断处理程序设计,保扩模式下的WIN32汇编语言程序设计初步,以及汇编语言程序的各种调试手段等。.

全书贯穿学以致用的指导原则,注重实例教学,通过大量实例引导读者由易到难一步步掌握汇编语言程序设计的核心技术。无论是初学者还是专业人士,都可以从中得到启迪,熟习并且掌据汇编语言程序设计的方法。..

本书是计算机及其相关专业本科生“汇编语言程序设计”课程的教材,特别适合应用型本科使用,也是研究生和各行各业计‘算机工作人员自学汇编语言程序设计的重要参考书。目录第1章 预备知识.

1.1 计算机语言

1.2 思维方式的转变

1.3 计算机中数的表示

习题

第2章 80x86实模式汇编的

运行环境

2.1 DOS下Edit的使用

2.2 Debug调试汇编程序

2.3 Emu8086的使用

2.4 用MASM(或ASM)运行汇编语言程序

2.5 Windows下虚拟DOS运行环境的拆握搭建

习题

第3章 PC引导机制

3.1 加电自检POST *** 作

3.2 *** 作系统的加载

3.3 嵌入式系统与汇编语言

习题

第4章 8086微处理器及其寻址方式

4.1 8086CPU的基本逻辑结构

.4.2 8086寄存器组

4.3 8086的存储器分段结构

4.4 堆栈

4.5 寻址方式

习题

第5章 汇编语言程序设计基础

5.1 源程序的书写格式

5.2 汇编语言的语句

5.3 汇编语激御晌言的数据组织及其访问

5.4 汇编语言程序正常结束的方式

5.5 指令简介

习题

第6章 数据传送与顺序程序设计

6.1 MOV指令与顺序程序设计

6.2 堆栈 *** 作

6.3 数据交换指令

6.4 查表转换指令

6.5 地址目标传送指令

6.6 标志位传送指令

6.7 端口输入/输出指令

6.8 顺序程序设计

习题

第7章 算术运算指令与程序设计

7.1 算术运算和逻辑运算对标志寄存器的影响

7.2 算术运算的数据格式

7.3 进制数加减运算

7.4 无符号二进制数乘除明锋运算

7.5 带符号二进制数乘除运算

7.6 非压缩型BCD码运算

7.7 压缩型BCD码加减运算

习题

第8章 逻辑运算

8.1 逻辑运算指令

8.2 移位指令..

8.3 循环移位指令

8.4 逻辑运算指令应用

习题

第9章 分支程序与循环程序设计

9.1 分支

9.2 程序设计流程图

9.3 循环程序设计

习题

第10章 串 *** 作指令与程序设计

10.1 字符串 *** 作综述

10.2 字符串 *** 作指令

10.3 串 *** 作指令的重复前缀

习题

第11章过程

11.1 过程的定义与说明

11.2 过程调用

11.3 过程的返回

11.4 模块间的调用和转移

11.5 寄存器的保护和恢复

11.6 调用程序与被调用过程之间的数据传送

11.7 递归

11.8 C语言调用汇编过程

习题

第12章 高级汇编语言技术

12.1 结构

12.2 联合

12.3 记录

12.4 宏

习题

第13章 中断及中断处理程序

13.1 中断及中断相关概念

13.2 软件中断

13.3 DOS中断服务

13.4 BIOS中断服务

13.5 DOS和BIOS功能调用实伊

13.6 典型的中断处理程序实例

习题

第14章 端口输入/输出与外设编程

14.1 端口

14.2 8259A、8253和8255典型芯片编程

14.3 其他芯片编程

14.4 综合实例

习题

第15章 32位80x86汇编

15.1 80386系统结构及内存寻址

15.2 WIN32汇编开发环境

15.3 W1N32汇编实践

习题

附录A ASCII表

附录B 调试程序OEBUG简介

附录C 键盘扫描码set1

参考文献


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/12344114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存