试编写一个汇编语言程序.docx

上传人:b****2 文档编号:19162526 上传时间:2023-04-24 格式:DOCX 页数:10 大小:16.96KB
下载 相关 举报
试编写一个汇编语言程序.docx_第1页
第1页 / 共10页
试编写一个汇编语言程序.docx_第2页
第2页 / 共10页
试编写一个汇编语言程序.docx_第3页
第3页 / 共10页
试编写一个汇编语言程序.docx_第4页
第4页 / 共10页
试编写一个汇编语言程序.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

试编写一个汇编语言程序.docx

《试编写一个汇编语言程序.docx》由会员分享,可在线阅读,更多相关《试编写一个汇编语言程序.docx(10页珍藏版)》请在冰豆网上搜索。

试编写一个汇编语言程序.docx

试编写一个汇编语言程序

1、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来.

答案:

abc:

movah,1

int21h

cmpal,'a'

jbstop

cmpal,'z'

jastop

subal,20h

movdl,al

movah,2

int21h

jmpabc

stop:

ret

2、编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示"MATCH",若不同则显示"NOMATCH".

答案:

datareasegment

string1db'asfioa'

string2db'xcviyoaf'

mess1db'MATCH','$'

mess2db'NOMATCH','$'

datareaends

prognamsegment

mainprocfar

assumecs:

prognam,ds:

datarea

start:

pushds

subax,ax

pushax

movax,datarea

movds,ax

moves,ax

begin:

movcx,string2-string1

movbx,mess1-string2

cmpbx,cx

jnzdispno

leadx,addr

leasi,string1

leadi,string2

repecmpsb

jnedispno

movah

,9

leadx,mess1

int21h

ret

dispno:

movah,9

leadx,mess2

int21h

ret

mainendp

prognamends

endstart

3、试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息:

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

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

(3)如果3个数都相等则显示3.

答案:

datasegment

arraydw3dup()

dataends

codesegment

mainprocfar

assumecs:

code,ds:

data

start:

pushds

subax,ax

pushax

movax,data

movds,ax

movcx,3

leasi,array

begin:

pushcx

movcl,4

movdi,4

movdl,''

movah,02

int21h

movdx,0

input:

movah,01

int21h

andal

,0fh

shldx,cl

ordl,al

decdi

jneinput

mov[si],dx

addsi,2

popcx

loopbegin

comp:

leasi,array

movdl,0

movax,[si]

movbx,[si+2]

cmpax,bx

jnenext1

adddl,2

next1:

cmp[si+4],ax

jnenext2

adddx,2

next2:

cmp[si+4],bx

jnenum

adddl,2

num:

cmpdx,3

jldisp

movdl,3

disp:

movah,2

adddl,30h

int21h

ret

mainendp

codeends

endstart

4、已知整数变量A和B,试编写完成下述操作的程序:

(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中;

(2)若两个数均为奇数,则两数分别加1,并存回原变量;

(3)若两个数均为偶数,则两变量不变.

答案:

dsegsegment

adw

bdw

dsegends

csegsegment

mainprocfar

assumecs:

cseg

,ds:

dseg

start:

pushds

subax,ax

pushax

movax,dseg

movds,ax

begin:

movax,a

movbx,b

xorax,bx

testax,0001

jzclass

testbx,0001

jzexit

xchgbx,a

movb,bx

jmpexit

class:

testbx,0001

jzexit

incb

inca

exit:

ret

mainendp

csegends

endstart

5、把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩.另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次.试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:

一个学生的名次等于成绩高于这个学生的人数加1).

答案:

dsegsegment

gradedw30dup()

rankdw30dup()

dsegends

csegsegment

mainprocfar

assumecs:

cseg,ds:

dseg,es:

dseg

start:

pushds

subax

,ax

pushax

movax,dseg

movds,ax

moves,ax

begin:

movdi,0

movcx,30

loop1:

pushcx

movcx,30

movsi,0

movax,grade[di]

movdx,0

loop2:

cmpgrade[si],ax

jbego_on

incdx

go_on:

addsi,2

looploop2

popcx

incdx

movrank[di],dx

sdddi,2

looploop1

ret

mainendp

csegends

endstart

6、分析下列程序的功能,写出堆栈最满时各单元的地址及内容.

SSEGSEGMENT'STACK'AT1000H;堆栈的段地址为1000H

DW128DUP()

TOSLABELWORD

SSEGENDS

;--------------------------------------------

DSEGSEGMENT

DW32DUP()

DSEGENDS

;---------------------------------------------

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DSEG,SS:

SSEG

START:

MOVAX,SSEG

MOVSS

,AX

MOVAX,DSEG

MOVDS,AX

MOVAX,4321H

CALLHTOA

RETN:

MOVAH,4CH

INT21H

MAINENDP

;---------------------------------------------

HTOAPROCNEAR

CMPAX,15

JLEB1

PUSHAX

PUSHBP

MOVBP,SP

MOVBX,[BP+2]

ANDBX,0FH

MOV[BP+2],BX

POPBP

MOVCL,4

SHRAX,CL

CALLHTOA

B1:

POPAX

B2:

ADDAL,30H

JLPRT

ADDAL,07

PRT:

MOVDL,AL

MOVAH,2

INT21H

RET

HTOAENDP

CSEGENDS

;;---------------------------------------------

ENDSTART

答案:

1000:

0F2H

B1

1000:

0F4H

3

1000:

0F6H

B1

1000:

0F8H

2

1000:

0FAH

B1

1000:

0FCH

1

1000:

0FEH

RETN

1000:

100H

7、写出分配给下列中断类型号在中断向量表中的物理地址.

(1)INT12H

(2)INT8

答案:

(1)00048h

(2)00020h

8、试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束.两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中.

答案:

movsi,0

movdi,0

test12:

inal,0024h

testal,08

jnzexit

inal,0036h

testal,08

jnzexit

dev1:

inal,0024h

testal,01

jzdev2

inal,0026h

movbuffer[si],al

incsi

dev2:

inal,0036h

testal,01

jztest12

inal,0038h

movbuff2[di],al

incdi

jmptest12

exit:

ret

9、给定(SP)=0100,(SS)=0300,(FLAGS)=0240,存储单元的内容为(00020)=0040,(00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT8,试问执行INT8指令后,SP,SS,IP,FLAGS的内容是什么栈顶的三个字是什么

答案:

(SP)=00FA

(SS)=0300

(IP)=0040

(FLAGS)=0040

堆栈内容:

00A1H

0900H

0240H

10、编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER.加密表为;

输入数字:

0,1,2,3,4,5,6,7,8,9

密码数字:

7,5,9,1,3,6,8,0,2,4

答案:

scodedb7,5,9,1,3,6,8,0,2,4

bufferdb10dup()

;……

movsi,0

movcx,10

leabx,scode

input:

movah,01

int21h

cmpal,0ah

jzexit

andal,0fh

xlat

movbuffer[si],al

incsi

loopinput

exit:

ret

.

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

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1