第4章 基本汇编语言程序设计Word文档下载推荐.docx

上传人:b****2 文档编号:3681019 上传时间:2023-05-02 格式:DOCX 页数:34 大小:69.76KB
下载 相关 举报
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第1页
第1页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第2页
第2页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第3页
第3页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第4页
第4页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第5页
第5页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第6页
第6页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第7页
第7页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第8页
第8页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第9页
第9页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第10页
第10页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第11页
第11页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第12页
第12页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第13页
第13页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第14页
第14页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第15页
第15页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第16页
第16页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第17页
第17页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第18页
第18页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第19页
第19页 / 共34页
第4章 基本汇编语言程序设计Word文档下载推荐.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第4章 基本汇编语言程序设计Word文档下载推荐.docx

《第4章 基本汇编语言程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第4章 基本汇编语言程序设计Word文档下载推荐.docx(34页珍藏版)》请在冰点文库上搜索。

第4章 基本汇编语言程序设计Word文档下载推荐.docx

可设计外循环体为8个字节左移一次,方法是:

最低位字节算术左移一次, 

次低位字节至最高位字节依次带CF位循环左移一次(内循环共8次),外循环体控制执行7次即可。

qvar 

movdx,7 

外循环次数

movax,byteptrqvar[0] 

最低位字节送ax

lpp:

 

shlax,1 

最低位字节左移一次,其d7移入CF位

mov 

si,1

movcx,7 

内循环次数

again:

rclbyteptrqvar[si],1 

高位字节依次左移P50

inc 

si

loop 

again

decdx

jnz 

lpp

.end

〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。

设这四组从低位到高位分别放在AL、BL、CL和DL寄存器中。

仅列出代码段:

movbl,al 

将al中的两组分开

andal,0fh 

屏蔽高四位后送al

movcl,4 

原al中的数据逻辑右移4次送bl

shrbl,cl

movdl,ah 

将ah中的两组分开

anddl,0f0h 

屏蔽低高四位后送dl

原ah中的数据逻辑右移4次送dl

shrdl,cl

movcl,ah 

屏蔽高四位后送cl

andcl,0fh

〔习题4.4〕编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。

getkey:

movah,1 

从键盘输入,出口:

al存键值

int21h

cmp 

al,'

a'

判键值是小写字母?

jb 

getkay

z'

ja 

subal,20h 

是小写字母转换为大写字母

movdl,al

movah,02h 

显示

〔习题4.5〕已知用于LED数码管显示的代码表为:

LEDtable 

DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

DB80h,90h,88h,83h,0c6h,0c1h,86h,8eh

它依次表示0~9、A~F这16个数码的显示代码。

现编写一个程序实现将lednum中的一个数字(0~9、A~F)转换成对应的LED显示代码。

DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

DB80h,90h,88h,83h,0c6h,0clh、86h,8eh

lednum 

DB?

movbx,offsetLEDtable 

moval,lednum

xlat 

al中存有对应的LED显示代码

.exit0

〔习题4.6〕请问第2章例题2.39/2.41/2.43/2.46的分支是单分支、双分支或多分支结构?

例题2.43/2.45/2.47为单分支结构;

2.50为多分支结构。

〔习题4.7〕分析第2章例题2.40的分支结构,画出流程图。

〔习题4.8〕如果在例题4.4的table中依次填入msg1~msg8,程序应该怎样修改?

(1)将jmptable[bx]指令改为:

movdx,table[bx]

(2)去掉源程序中:

.exit0---end之间的语句

〔习题4.9〕编制一个程序,把变量bufX和bufY中较大者存入bufZ;

若两者相等,则把其中之一存入bufZ中。

假设变量存放的是8位无符号数。

bufx 

db?

bufY 

bufz 

moval,bufX

movbl,bufY

cmpal,bl

janext

movbufZ,bl

jmpdone

next:

movbufZ,al

done:

〔习题4.10〕设变量bufX为有符号16位数,请将它的符号状态保存在signX,即:

如果X大于等于0,保存0;

如果X小于0,保存-1(ffh)。

编写该程序。

.stack

bufX 

dw-7

signX 

cmpbufX,0 

;

testbufX,80h

jlnext 

jnznext

movsignX,0

next:

movsignX,-1

〔习题4.11〕bufX、bufY和bufZ是3个有符号16进制数,编写一个比较相等关系的程序:

(1)如果这3个数都不相等,则显示0;

(2)如果这3个数中有两个数相等,则显示1;

(3)如果这3个数都相等,则显示2。

dw?

movax, 

bufX 

movbx, 

bufY

movcx, 

bufZ

movdl,'

0'

cmpax,bx

jnznext1

incdl

next1:

cmpax,cx

jnznext2

next2:

cmpbx,cx

jnznext3

next3:

cmpdl,’3’

jbnext4

movdl,’2’

next4:

movah,02h 

〔习题4.12〕分析第2章例题2.42、2.52、2.53的结构,分别画出它们的流程图。

2.42 

2.52

2.53

〔习题4.13〕例题4.8内外循环次数共是多少?

如果要求按从大到小排序,程序如何修改?

外循环次数是:

count-1次(19次)

内循环次数是:

(count-1)!

次 

(19!

次)

内外循环次数共是count-1+(count-1)!

次,即19+19!

〔习题4.14〕串操作指令常要利用循环结构,现在不用串操作指令实现字符串string1内容传送到字符串string2,字符长度为count。

.model 

small

string1 

db 

'

goodmorning!

'

len 

$-string1

string2 

lendup(?

movcx,len 

字符数

movsi,offsetstring1 

源指针

movdi,offsetstring2 

目标指针

moval,[si] 

送一个字符

mov[di],al

incsi 

修改指针

incdi 

loopagain 

cx=cx-1,cx=0时退出循环

end 

〔习题4.15〕不用串操作指令求主存0040h:

0开始的一个64KB物理段中共有多少个空格?

这里仅列出主程序段:

movax,0040h 

送段地址

movds,ax 

xorsi,si 

偏移量地址

xorcx,cx 

计数(循环次数)

xordx,dx 

空格计数器清零

cmp[si],20h 

与空格的ASCII码比较

jne 

next 

不是空格,转

incdx 

是空格,空格数加1

修改地址指针

cx=cx-1,如cx=0退出循环

〔习题4.16〕编程实现把键入的一个字符,用二进制形式(0/1)显示出它的ASCII代码值。

.modelsmall

stri1 

db'

pleaseinput'

0dh,0ah,'

$'

dx,offsetstri1 

movah,09h

movah,01h 

int21h 

movcx,8 

xordl,dl

shlal,1 

adcdl,'

movah,02h

〔习题4.17〕编写程序,要求从键盘接收一个数bellN(0~9),然后响铃bellN次。

pleaseinputnumber:

1--9'

显示stri1,提示输入

movah,01h 

调用输入一个字符

int 

21h 

输入一个字符存在al中

cmpal,'

1'

判该字符,如不在‘1’--‘9’

jb 

again 

重新输入

9'

andal,0fh 

在‘1’--‘9’,屏蔽高4位

movcl,al 

振铃次数送cx

xorch,ch

abc:

movdl,07h 

调用一次振铃

movah,02h

loopabc

〔习题4.18〕编写程序,将一个包含有20个有符号数据的数组arrayM分成两个数组:

正数数组arrayP和负数数组arrayN,并分别把这两个数组中的数据个数显示出来。

includeio.inc

arrayM 

1,2,3,4,5,6,0,-3,-5,-6,0,7,6,90,-18,-23,34,7,9,8 

源数组

arrayP 

20dup(?

) 

正数数组

arrayN 

负数数组

dispP 

PlusNumber:

'

dispN 

db0dh,0ah,'

NegsNumber:

movcx,20 

源数组元素数

xorbx,bx 

设bh为正数个数,bl为负数个数,均清零

源数组地址位移量

循环20次

movax,arrayM[si] 

取一个元素

cmpax,0 

判正数

jlNeg

incbh 

是,正数个数加1

jmpnext

Neg:

incbl 

否,负数个数加1

修改位移量

循环次数减1

movah,09h 

调用显示字符串功能

movdx,offsetdispP 

显示个数

21h

moval,bh

calldispuib 

调用I/O子程序库中的子程序

movdx,offsetdispN 

int 

moval,bl

〔习题4.19〕编写计算100个正整数之和的程序。

如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘overflow’。

num 

equ100

wlist 

dwnumdup(?

wordsum 

error 

overflow.$'

movbx,offsetwlist

movcx,num

xorax,ax

addax,[bx]

jcnext

incbx

mov[bx],ax

movdx,offseterror

movah,9

〔习题4.20〕编程判断主存0070h:

0开始的1KB中有无字符串‘DEBUG’。

这是一个字符串包含的问题,可以采用逐个向后比较的简单算法。

disp1 

Thereis 

DEBUGintheaera!

0dh,0ah,‘$'

disp2 

Thereisno 

.startup 

movax,0070h 

movds,ax

地址指针清零

movcx,1024

cmp[si],'

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2