搜档网
当前位置:搜档网 › 24个汇编实例小程序00988

24个汇编实例小程序00988

24个汇编实例小程序00988
24个汇编实例小程序00988

24 个汇编小程序

题目列表:

逆序输出字符串“ BASED ADDRESSING” 从键盘上输入两个数,分别放到x,y 单元,求出它们的和

试编写一段程序,要求在长度为10h 的数组中,找出大于42h 的无符号数的个数并存入地

址为up 开始区域,找出小于42h 的无符号数的个数并存入地址为down 的开始区域键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符

把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来

求出首地址为data 的100 个字数组中的最小偶数,并把它放在ax 中

输入两船字符串stringl和string2 ,并比较两个字符串是否相等,相等就显示"match ”,否则显示no match ”

从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数

从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果有一个首

地址为mem 的100 个字的数组,试编程序删除数组中所有为零的项,并将后续项

向前压缩,最后将数组的剩余部分补上零

从键盘上输入一串字符(用回车键结束,使用 1 0号功能调用)放在string 中,是编制一个

程序测试字符串中是否存在数字。如有,则把cl 的第五位置1,否则将该位置置0

在首地址为data 的字数组中,存放了100h 的16 位字数据,试编写一个程序,求出平均值

放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f分别

考虑有符号数、无符号数情况)

一直数组 A 包含15 个互不相等的整数,数组 B 包含20 个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中

设在A、B 和 D 单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存放在

S单元,若其中有一个数为0,则把其它两个单元也清零。请编写此程序

从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示这三类的计数结果

已定义两个整数变量A和B,试编写程序完成以下功能(1)若两个树种有一个是奇数,则将奇数存入 A 中,偶数存入 B 中

(2 )若两个数均为奇数,则将两个数加 1 后存回原变量

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

写一段子程序skiplines ,完成输出空行的功能。空行的行数由用户在主程序过键盘输入,并将行数放在ax 寄存器中

设有10 个学生成绩分别是76, 69 ,84,73,88,99,63,100 和80。试编写一个子程序统计60-69 分,70-79 分,80-89 分,90-99 分和100 分的人数,并分别放到S6,S7,S8,S9,S10 单元中

编写子程序嵌套结构的程序,把整数分别用二进制和八进制显示出来

在D盘根目录建立一个文件abc.txt,第一次向文件写入“ 123456 ”六个字符,第二次增加“abcdefg ”几个字符

从键盘上输入文本文件:“ d:\temp.txt ”的容后,然后新建一个文件“ d:\temp2.txt ”,把前一个文件的所有容复制到后一个文件中

从键盘上输入一个十进制数,以十六进制数显示出来。要求子程序用寄存器参数传送方法

试编制一个程序,把bx 寄存器中的二进制数用十六进制数的形式在屏幕上显示出来

代码:

1.逆序输出字符串“ BASED ADDRESSING”

s1

top s1 segment stack dw 100 label word

ends

s2 S2 s3

;定义栈段s1

dup(?);定义栈空间为100

;top 指向栈顶

segment ;定义数据段s2 db 'BASED ADDRESSING','$' ;定义字符串s ends

segment ;定义代码段s3

assume cs:s3,ds:s2,ss:s1

s2 segment h1 db 'Please input x:','$' ;提示输入 h2 db 'Please input y:','$' ;提示输入

h3 db 'z=x+y:','$' ;提示输出 crlf db 0dh,0ah,24h

;定义回车换行

x

dw ?

y

dw

?

s2

ends

s3 segment

assume cs:s3,ds:s2,ss:s3 main

proc far mov ax,s1 ;初始化

mov

ss,ax

lea sp,top

mov

ax,s2

main proc mov mov lea

far ax,s1 ss,ax sp,top ;栈初始化 —— ;—— 栈初始化

mov

ax,s2 ;数据段初始化 ——

mov

ds,ax

;—— 数据段初始化

mov

si,15

l:

mov dl,s[si] ;dl 获取字符串 s 的最后一个(从零开始的第十五个字符)

mov ah,2 ;调用 int 21h 2 号功能输出 dl 上的值

int

21h

dec

si

;寄存器减一,准备获取下一个字符

cmp

si,0

ja

l

mov

ah,4ch

;终止

int

21h

main endp

s3

ends

end

main

x , y 单元,求出它们的和

s1

segment stack

dw 100h

dup(?)

top label word

s1 ends

2.从键盘上输入两个数,分别放到

InputX:

jmp InputX

lea dx,crlf mov ah,9 int 21h lea dx,h2 mov ah,9 int 21h xor

bx,bx

InputY:

;和 InputX 类似,输入 y

mov ah,1 int 21h cmp al,0dh jz exit2 cmp al,30h jl exit2

mov ds,ax ;——初始化

lea dx,h1 ;int 21h 9号功能输出“提示输入x ”的字符串

mov ah,9 int 21h xor bx,bx

;bx 清零,即把 bx 置零

mov ah,1 ;输入一个字符

int 21h

cmp al,0dh jz exit1 cmp al,30h jl exit1 cmp al,39h jg exit1 sub al,30h

;判断时候为“回车”字符 ;如果是回车字符就跳转到 exit1 和30h (即字符0的asii 值)比较 ;如果输入字符小于 '0' ,跳转到 exit1

和39h (即字符9的ascii 值)比较 ;如果输入字符大于 '9' ,跳转到 exit1

;al 减去30h ,输入字符转化成数字(从这一行开始到后面

的 add bx,ax 为输入字符转化为数字的处理方法)

;al 扩充为 ax

xchg ax,bx

mov cx,10 mul cx xchg ax,bx add bx,ax

;sub al,30h 开始到这一行为输入字符转化为数字的处理方 exit1: mov x,bx

;把输入的存于bx 的放到x 中

cbw

cmp al,39h jg exit2 sub

al,30h cbw

xchg ax,bx mov cx,10 mul cx xchg ax,bx add

bx,ax

jmp InputY

dec

si

cmp si,0

jnz l5 mov ah,4ch

exit2: mov y,bx mov bx,x

add bx,y

;把输入的存于 bx 的放到 y 中

;此时 bx 为两数加和

lea dx,crlf mov ah,9 int 21H lea dx,h3 mov ah,9 int 21h

xor si,si ;si 清零,用作计数

mov ax,bx

;把和放到 ax 上

l4: mov cl,10 div cl

;把和连续除以 10 知道和变为零,余数依次进栈

mov dl,ah mov dh,0 push dx inc si mov ah,0

;重要,不能漏写

cmp al,0 jnz l4 l5: pop dx add

dl,30h mov

ah,2

int 21h ;余数依次出栈

;余数转换为显示的余数字符 ;输入余数字符

int 21H

main endp s3

ends end main

3.

是编写一段程序,要求在长度为 10 的数组中,找出大于 42h

的无符号数的个数并存入地

址为 up 开始区域,找出小于 42h 的无符号数的个数并存入地址为 down 的开始区域,并分 别显示 up 、 down 数组的个数和数组的数字

s1

segment stack

dw 100h dup(?)

top label word

s1 ends

s2 segment

h1 db 'the num of up array and the up array are(prints in decimalism) :','$'

h2 db 'the num of down array and the down array are(prints in decimalism) :','$'

ends

crlf array db

db

up down db

db 0dh,0ah,24h 0,50h,11h,61h,22h,72h,33h,73h,41h,74h,'$' 10 dup(?) 10 dup(?)

;定义数组 array ; 定义 up 数组 ;定义 down 数组 s2 s3

segment

assume cs:s3,ds:s2,ss:s3 main

proc far mov ax,s1

mov

ss,ax

lea

sp,top

mov

ax,s2

mov

ds,ax

mov

si,0

mov

di,1

mov

bp,1

repeat: cmp array[si],42h

42h 的值放到 up 数组里面

jb

downarray

mov

dl,array[si]

mov

up[bp],dl

inc

si cmp si,10

jz

exit1

;把 array 数组中小于 42h 的值放到 down 数组里,大于

bp jmp repeat

inc di

jmp repeat

exit1: sub di,1 jmp exit exit2: sub bp,1 exit: mov dx,bp ;把分配好的 up 数组和 down 数组在其有效数字后面添加 '$' ,

便于后面的输出结束

mov up[0],dl inc bp mov up[bp],'$' mov dx,di mov down[0],dl

inc di

mov down[di],'$' mov cl,10 mov si,0 lea dx,h1 mov ah,9 int 21h PrintUparray:

cmp up[si],'$' jz next mov al,up[si] call print inc si jmp PrintUparray

next: lea dx,crlf mov ah,9 int 21h

inc

downarray:

mov mov inc cmp jz dl,array[si]

down[di],dl si

si,10 exit2

lea dx,h2 int 21h xor si,si PrintDownArray:

cmp down[si],'$' jz atend

mov al,down[si]

call inc jmp print

si PrintDownArray

print proc near ;print 为输出十进制输出某个数的子程序mov di,0

rediv: mov ah,0

div cl

mov dl,ah

mov dh,0

push dx

inc di

cmp al,0

jnz rediv

break: pop dx

add dl,30h

mov ah,2

int 21h

dec di

cmp di,0

jnz break

mov dl,' '

mov ah,2

int 21H

ret

print endp

atend: mov ah,4ch

int 21H

main endp

s3 ends

end

4. 键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出

s1 segment stack

dw 100h dup(?)

top label word

s1 ends

s2 segment

h1 db 'Please input a string:'

h2 db 'The changed string is

crlf db 0dh,0ah,24h

temp db ?

s2 ends

s3 segment

assume cs:s3,ds:s2,ss:s3

main proc far

mov ax,s1

mov ss,ax

lea sp,top

mov ax,s2

mov ds,ax

lea dx,h1

mov ah,9

int 21h

mov si,0

l: mov ah,1 int 21h cmp al,0dh jz exit cmp al,'a' jl putin cmp al,'z' jg putin sub al,20h

putin: mov temp[si],al ;把字符放到temp 数组里

inc si

jmp l

exit: lea dx,crlf ;输出tmp 数组

;把小写字符变为大写字符

mov

int lea mov int ah,9

21h dx,h2

ah,9 21h

inc

si

mov

temp[si],'$'

lea

dx,temp

mov ah,9

int 21h

mov

ah,4ch

int

21H

main endp s3

ends

end

main

5. 从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符

s1 segment stack

dw 100h dup(?)

top

label word s1 ends

s2

ends

s3

segment

assume cs:s3,ds:s2,ss:s3 main

proc far mov ax,s1

mov

ss,ax

lea

sp,top mov ax,s2

mov

ds,ax

l: lea mov int

s2 h1 segment db h2

crlf

db db

'Please input a lowercase: ','$' 'The the three chars are: ','$' 0dh,0ah,24h

dx,h1 ah,9 21h

mov ah,1

int 21h

cmp al,'a'

jl l

cmp al,'z'

jg l mov

cl,al

lea dx,crlf

mov ah,9

int 21H lea dx,h2

mov ah,9

int 21h

dec cl

mov dl,cl

mov ah,2

int 21h

mov dl,' '

mov ah,2

int 21h

inc cl

mov dl,cl mov ah,2

int 21h

mov dl,' '

mov ah,2

int 21h

inc cl

mov dl,cl

mov ah,2 int 21h ;输出前导字符;输出该字符;输出后导字符

mov ah,4ch int 21H main endp

s3 ends

end main

6?把一个包含20个数据的数组 M 分成两组:正整数组 P 和负整数组N ,分别把这两个数组 中的数

据的个数显示出来 dw 100h dup(?) top label word

s1 ends

s2 segment h1 db 'the positive number is: ','$' h2 db 'the negative number is: ','$' crlf db

0dh,0ah,24h

array

50h,-11h,61h,-22h,72h,-33h,73h,-41h,74h,21h,67h,-90h,73h,77h,-1h,-89h,-11h,61h,-22h 0h,'$'

s2 ends

s3 segment

assume cs:s3,ds:s2,ss:s3 main proc far mov ax,s1 mov ss,ax lea sp,top

mov ax,s2 mov

ds,ax

mov bx,0

mov

si,0

l: mov dx,array[si] cmp dx,0 jl addlow ;有符号数比较用 jl

add si,2 cmp si,40

jz exit jmp l

addlow: i nc bx add si,2

cmp si,40 jz exit jmp

l s1 segment stack ,2

dw

exit: lea

dx,h2

mov int

ah,9 21h

mov ax,bx

call print

lea dx,crlf

mov ah,9

int 21h

lea dx,h1

mov ah,9

int 21h

mov ax,20

sub ax,bx

call print

jmp atend

print proc near

mov cl,10

mov si,0

repeat: div cl

mov dl,ah

add dl,30h

mov dh,0

push dx

inc si

mov ah,0

cmp al,0

jnz repeat

l2: pop dx

mov ah,2

int 21h

dec si

cmp si,0

jnz l2

;打印数字字符的子程序

ret

print endp

atend: mov ah,4ch

21H

int

main endp

s3 ends

end main

7.打印输出首地址为data 的20 个字数组中的最小偶数

s1 segment stack

dw 100h dup(?) top label word

s1 ends

s2 segment

h1 db 'the min even number is: ','$'

crlf db 0dh,0ah,24h

data dw 50,-11,61,-22,72,-33,73,-41,74,21,67,-90,73,77,-1,-89,-11,61,-22,20,'$' s2 ends s3 segment

assume cs:s3,ds:s2,ss:s1

main proc far

mov ax,s1

mov ss,ax

lea sp,top

mov ax,s2

mov ds,ax

mov bx,65534 ;bx 存最小数,初始令最小值置为65534

mov si,0

mov cl,100

mov dl,2 l2: mov ax,data[si]

cmp ax,0 jnl l4

neg ax ;如果是负数,则求补

l4: div cl

mov al,ah

mov ah,0

div dl

cmp ah,0 jnz l1

cmp bx,data[si] jl l1

mov bx,data[si]

;比较最小值和数组中的每个数 ;如果数组中的数大于最小值跳转到

l1

;如果数组中的数小于最小值则将其赋给最小值

l1: add si,2 cmp si,40 jz exit jmp l2

repeat: div cl

mov

dl,ah add dl,30h

mov

dh,0 push dx inc

si

mov ah,0

cmp al,0 jnz repeat

l3: pop dx

l5: lea dx,h1 mov ah,9 int 21h cmp bx,0 jnl

l5 neg

bx

mov dl,'-' mov ah,2 int 21h mov ax,bx call print jmp atend proc near mov cl,10 mov

si,0

exit: print ;调用子程序输出最小值

mov int dec cmp jnz

ah,2 21h si si,0 l3

print

ret endp

atend: mov ah,4ch

int 21H

main endp

s3 ends

end main

8.输入两船字符串string1 和string2 ,并比较两个字符串是否相等,相等就显示“ match ”,否贝U显示’ho match ”

s1 segment stack

dw 100h dup(?)

top label word

s1 ends

s2 segment

h1

db 'Please input the first string: ','$

h2

db 'Please input the second string:

h3 db 'MATCH','$'

h4 db 'NO MATCH','$'

crlf db 0dh,0ah,24h

str1

db 50,?,50 dup('$')

str2 db 50,?,50 dup('$')

s2 ends

s3 segment

assume cs:s3,ds:s2,ss:s3

main proc far

mov ax,s1

mov ss,ax

lea sp,top

mov ax,s2

mov ds,ax

lea dx,h1

mov ah,9 int 21h lea dx,str1 mov ah,0ah int 21h lea dx,crlf mov ah,9

int 21h lea dx,h2 int 21h lea dx,str2 mov ah,0ah int 21h lea dx,crlf mov ah,9 int 21h

mov cmp jnz dl,str1+1

dl,str2+1 l

;str1+1 为str1 实际的字符个数

;str2+1 为str2 实际的字符个数

mov si,2

l2: mov dl,str1[si]

cmp dl,str2[si]

jnz l

inc si

cmp si,50

jz l3

jmp l2

l: lea dx,h4 ;输出不匹配信息mov ah,9

int 21h

l3: lea dx,h3 ;输出匹配信息mov ah,9

int 21h

mov ah,4ch

21H

main endp

s3 ends

end main

9.从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数s1 segment stack

top s1 dw label

ends

100h dup(?)

word

s2 segment

h1 db 'Please input a hexadecimal number: ','$ h2 db 'The number is printed in binary number: temp db 17 dup('$')

crlf db 0dh,0ah,24h

s2 ends

s3 segment

assume cs:s3,ds:s2,ss:s3

main proc far

mov ax,s1

mov ss,ax

lea sp,top

mov ax,s2

mov ds,ax

repeat: lea dx,h1

mov ah,9

int 21h

mov bx,0

mov cx,4

newchar: ;接收新字符

mov ah,1

int 21h

cmp al,30h

jb repeat

cmp al,46h

jg repeat

cmp al,39h

int

汇编语言程序设计练习题

汇编语言程序设计练习题 一、字符与串处理类 1.逆序输出字符串“BASED ADDRESSING”。 2.试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。 3.编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 4.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。 5.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。)放在STRING中,试编制一个程序测试字符串中是否存在数字。如有,则把CL的第5位置1,否则将该位置置0。 6.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。),将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。 7.试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。 8.试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MATCH”。 9.试编写一段程序,要求输入两个字符串,如两个字符串相等则显示“MATCH”, 否则显示“NO MATCH”。 10.试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。 11.在内存区域0B800:0000-0B800:0FFFF(都是16进制数)内查找首地址为SOURCE的串(SOURCE的首字节为串长度),如果找到,则把AL的第0位置0,否则将该位置置1。 12.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中。 13.在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一个程序:在数组中查找该数,如果找到此数,则把它从数组中删除。 二、数字输入输出类 1. 试编制一个程序,把BX寄存器内的二进制数以十六进制数的形式在屏幕上显示出来。 2. 试编制一个程序,把BX寄存器内的二进制数以八进制数的形式在屏幕上显示出来。 3. 试编制一个程序,把BX寄存器内的二进制数以十进制数的形式在屏幕上显示出来。 4.从键盘上输入2个一位数,求出它们的和(假设和不超过1位)。 5.试编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 6.试编写一段程序,从键盘接收一个0-65535间的十进制无符号数,并在终端上显示与它等值的二进制数。 7.试编写一段程序,从键盘接收一个-32768-32767间的十进制有符号数,并在终端上显示与它等值的二进制数。 8.编写一个程序,从键盘输入一个0~65535之间的10进制无符号数,然后以16进制

嵌入式简单汇编程序实例

ARM实验报告 姓名:郭健傧学号:L2101898 1.实验目的 (1)了解ADS1.2集成开发环境及ARMulator软件仿真; (2)熟悉ARM的乘法指令和逻辑指令; (3)结合ARM处理器硬件特性,比较处理函数的特性; 2.实验设备 硬件:pc机一台; 软件:Windowsxp系统,ADS1.2集成开发环境; 3.实验内容 (1)建立一个新的工程; (2)建立一个汇编文件,并添加到工程; (3)根据所给的两个C语言函数编写相应的汇编程序,并比较一下代码中fact1和fact2两个函数的特性; 4.实验步骤 (1)启动ADS1.2IDE集成开发环境,使用ARM Executable Image 工程模块建立一个工程heiye。 (2)建立汇编源文件test.s,编写程序实验,并添加到工程heiye中。 (3)设置工程连接地址Ro Base为0x40000000,RWBase为0x40003000。设置调试入口地址Image entry point为0x40000000。 (4)编译链接工程,并启动AXD进行软件仿真调试。 5.编写程序如下: C程序源代码: int fact1(int limit) { int fact=1; for(i=1;i

汇编经典小程序(精编文档).doc

【最新整理,下载后即可编辑】 实验一:判断一个数X的正,负数,还是零。(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !) DATA SEGMENT X DB 10 CR EQU 0DH LF EQU 0AH W DB 'This is a zore!',CR,LF,'$' ZHENG DB '+',CR,LF,'$' FU DB '-',CR,LF,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X AND AL,AL JZ L1 SHL AL,1 JC L3 JMP L2 L1: MOV DX,OFFSET W MOV AH,9 INT 21H JMP L4 L2: MOV DX,OFFSET ZHENG MOV AH,9 INT 21H JMP L4 L3: MOV DX,OFFSET FU MOV AH,9 INT 21H

L4: MOV AH,4CH INT 21H CODE ENDS END START 实验二:求十个数中的最小数,并以十进制输出。(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法)DATA SEGMENT XDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09H MIN DB ? CR EQU 0DH LF EQU 0AH W DB ' is min',CR,LF,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,9 MOV SI,OFFSET XDAT MOV AL,[SI] L2: CMP AL,[SI+1] JC L1 MOV AL,[SI+1] L1: INC SI LOOP L2 ADD AL,30H MOV DL,AL MOV AH,2

汇编程序习题

汇编程序习题 1.试分析以下程序段完成什么功能? MOV CL,4 SHL DX,CL SHL AX,CL SHR BL,CL INT 3 2.写出执行以下计算的指令序列: 1)Z←W+(Z-X)2)Z←W-(X+6)-(R+10) 3)Z←(W*X)/(R+6)4)Z←((W-X)/5*Y)*2 3.求两个数56H和67H进行ADD,并求出标志OF,CF,SF,ZF的值。4.阅读程序段,回答下述问题: 1)MOV AX,4000H 2)MOV AX,5678H 3)MOV AX,1234H OV DS,AX MOV BX,99AAH MOV CX,8912H MOV BX,1238H PUSH BX CMP AX,CX MOV〔BX〕,2244H PUSH AX INT 3 MOV AL,〔BX〕 POP DX SF=?OF=?JA成立否? INT 3 POP CX AL=?存储器的物理地址=?DX=?CX=? 5.下列程序能完成什么功能? DATY1 DB 300DUP(?) DATY2 DB 100DUP(?) …… MOV CX,100 MOV BX,200 MOV SI,0 MOV DI,0 NEXT:MOV AL,DATY1〔BX〕〔SI〕 MOV DATY2〔DI〕,AL

INC SI INC DI LOOP NEXT 6.下列指令哪些是错误的?并简述之。 1)MOV 15,BX 2)CMP OP1,OP2(假定OP1,OP2是用DB定义的变量) 3)CMP AX,OP1 4)CMP OP1,25H 5)MOV DS,CS 7.下列程序段执行后,BX的值是什么? MOV CL,3 MOV BX,0B8H ROL BX,1 ROR BX,CL 8.编写一个程序段,将内存200H单元开始的256个单元的内容,取绝对值后传送到400H开始的256个单元中。 9.求出下列各数与62A0H之和,并根据结果确定SF,ZF,CF,OF的值。 1)1234H 2)4321H 3)CFA0H 4)9D60H 10.求出下列各数与4AE0H之差,并根据结果确定SF,ZF,CF,OF的值。 1)1234H 2)5D80H 3)9090H 4)EA04H

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

24个汇编实例小程序

24个汇编小程序 题目列表: 逆序输出字符串“BASED ADDRESSING” 从键盘上输入两个数,分别放到x,y单元,求出它们的和 试编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域 键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出 从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符 把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来 求出首地址为data的100个字数组中的最小偶数,并把它放在ax中 输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match” 从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果 有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零 从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0 在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f分别考虑有符号数、无符号数情况) 一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中 设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存放在S单元,若其中有一个数为0,则把其它两个单元也清零。请编写此程序

51汇编程序练习题1

单片机汇编程序设计练习 一、存储器之间的数据传送 1、编程实现将单片机内部RAM60H开始的连续32个单元置为FFH。 2、编程实现将内部RAM30H开始的连续16个数传送到内部RAM50H开始的连续单元中。 3、编程实现将单片机外部RAM2000H为首地址的数据块传送到单片机内部RAM30H开始的单元中,数据块的长度为32个字节。 4、编程实现将单片机内部RAM30H为首地址的数据块传送到外部RAM2000H 开始的单元中,数据块的长度存放于内部RAM的20H单元。 5、编程实现将单片机外部RAM2000H为首地址的数据块传送到单片机内部RAM30H开始的单元中,直到数据内容为0DH时停止传送。 6、编程实现将ROM1000H地址的内容传送到内部RAM的25H单元。 7、编程实现将ROM2000H开始的连续10个地址的内容传送到内部RAM的25H 开始的单元。 8、编程实现将ROM1000H开始的连续100个地址的内容传送到外部RAM2000H 开始的连续单元中。 二、查表程序设计 1、编写查表程序,要查表的数据存放在R7中,其范围为0~9。编程查其平方值,并存放于40H。 2、编写查表程序,要查表的数据存放在R7中,其范围为0~9。编程查其立方值,并存放于R6。 3、单片机外部ROM TAB1地址开始存放一组ASCII码表,试用查表方法,将R2的内容(范围为0~F)转换为与其对应 的ASCII码,并从P1口输出。 4、使用8051的P1口作为段控驱动共阳 LED数码管,硬件连接如图。 编程实现将8051 R7单元内容(在 00H-09H之间)显示在数码管上。00H-09H 的共阳字形代码如下表所示。 04H 05H 06H 07H 08H 09H

汇编语言程序例题0001

【例】试编写一程序计算以下表达式的值。 w = (v- (x * y + z -540 )) /x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。 DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP (?) DATA ENDS STACK SEGMENT STACK DB 200 DUP (0) STACK ENDS CODESEGMENT ASSUME DS DATA CS: CODE SS: STACK START MOV AX DATA MOV DS AX ; DATA>AX MOV AX X IMUL Y ; (X) * (DX AX MOV CX AX

MOV BX,DX ;(DX AX) T BX : CX ) MOV AX,Z CWD ; (Z)符号扩展 ADD CX,AX ADC BX,DX ; ( BX: CX)+( DX:AX)BX: CX) SUB CX,540 SBB BX,0 ;( BX:CX) - 5 40~BX : CX) MOV AX,V CWD ; (V)符号扩展 SUB AX,CX SBB DX, BX ;( DX: AX)-((BX CX DX: AX) IDIV X ;( DX:AX)/X MOV W,AX ;商5 MOV W+2 DX ;余数D?W+2 MOV AH,4CH INT 21H CODEENDS ;退出DOS 状态 END START 【例】已知某班学生的英语成绩按学号(从 1 开始)从小到大的顺序排列在要查的学 生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下: STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB 80 ,85,86,71,79,96 DB 83 ,56,32,66,78,84 NO DB 10 ENGLIST DB ? DATA ENDS CODE SEGMENT ASSUME DS: DATA,SS: STACK,CS: CODE BEGIN: MOV AX,DATA MOV DS,AX LEA BX,TAB MOV AL,NO DEL AL XLAT TAB MOV ENGLIS,H AL MOV AH,4CH INT 21H CODEENDS TAB表中,

8086汇编经典例程

========================================== 5.编写一个数组排序(从小到大)的小程序,数组在程序中定义,程序先将原数组显示一遍,然后排序,再将排好序的数组显示一遍。 ========================================== AAA SEGMENT BUF DB '45$' L = $ - BUF ary dw -897,345,6789,8654,-1234, -3456,-99,-678,987,567, 32762,-12121,0,3434,4645,-234, 23455,-100,100,1000,-1000 dw 572,-2345,-6543,-1234,9999 | len dw ($-ary)/2 ASSUME CS:AAA, DS:AAA MAIN PROC FAR PUSH CS POP DS LEA SI,ARY MOV CX,LEN NEXT3: MOV BX,[SI] CALL DISP CALL SPACE - ADD SI,2 LOOP NEXT3 CALL CRLF CALL CRLF LEA SI,ARY MOV CX,LEN CALL SORT LEA SI,ARY MOV CX,LEN NEXT5: MOV BX,[SI] CALL DISP … CALL SPACE ADD SI,2 LOOP NEXT5 MOV AH,4CH INT 21H MAIN ENDP DISP PROC PUSH SI PUSH AX PUSH BX ! PUSH DX PUSH CX MOV CX,0 CMP BX,0 JNL NEXT1 NEG BX MOV CX,1 NEXT1: LEA SI,BUF+l-1 MOV AX,BX MOV BX,10 NEXT: MOV DX,0 } DIV BX ADD DL,30H DEC SI MOV [SI],DL CMP AX,0 JNE NEXT CMP CX,0 JE NEXT2 DEC SI MOV BYTE PTR [SI],'-' NEXT2: MOV DX,SI ! MOV AH,9 INT 21H POP CX POP DX POP BX POP AX POP SI RET DISP ENDP SORT PROC ( NEXTT: PUSH CX MOV DI,SI MOV AX,[SI] NEXT0: CMP AX,[DI] JL NEXTQ MOV BX,AX MOV AX,[DI] MOV [DI],BX NEXTQ: ADD DI,2 LOOP NEXT0 MOV [SI],AX … ADD SI,2 POP CX LOOP NEXTT RET SORT ENDP CRLF PROC PUSH AX PUSH DX MOV DL,13

汇编语言程序设计练习题

汇编语言程序设计练习题 阅读程序并完成填空: 1.1.MOV BL,85H MOV AL,17H ADD AL,BL AL=?,BL=?,CF=? 2.2.MOV AX,BX NOT AX ADD AX,BX INC AX AX=?,CF=? 3.3.MOV AX,0FF60H STC MOV DX,96 XOR DH,0FFH SBB AX,DX AX=?,CF=? 4.4.MOV BX,0FFFEH MOV CL,2 SAR BX,CL 5.5.MOV BX,0FFH AND BX,0FFFH OR BX,0F0FH XOR BX,00FFH 上述程序段运行后,BX=?,CF=? 6.6.CMP AX,BX JGE NEXT XCHG AX,BX NEXT:CMP AX,CX JGE DONE XCHG AX,CX DONE:。。。。。 试回答: (1)(1)上述程序段执行后,原有AX、BX、CX中最大数存放在哪个寄存器中? (2)(2)这3个数是带符号数还是无符号数?

7.7.在数据段ADDR1地址处有200个字节,要传送到数据段ADDR2处。 MOV AX,SEG ADDR1 MOV DS,AX MOV ES,------- MOV SI,------- MOV DI,OFFSET ADDR2 MOV-----,200 CLD REP--------- 8.8.ADDR1开始的单元中连续存放两个双字数据,将其求和存放在ADDR2开始的单元。 MOV CX,2 XOR BX,BX CLC NEXT:MOV AX,[ADDR1+BX] ADC AX,------- MOV[ADDR2+BX],AX ADD--------,2 ---------NEXT 9.9.设初值AX=1234H,BX=5678H,DX=0ABCDH,则执行下面一段程序后AX=------,BX=----,DX=--------。 MOV CL,4 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 10.10.设有一个首地址为ARRAY有N个字数据的数组,要求求出该数组之和,并把结果存入TOTAL地址中,有关程序如下:MOV CX,------ MOV AX,0 MOV SI,0 START:ADD AX,-----

STC12系列单片机的PWM输出汇编语言示例程序

STC12系列单片机的PWM输出汇编语言示例程序

对于以下程序我的理解是:equ是一个符号定义伪指令pulse_width_max equ 0f0HMOV A,#pulse_width_max 它的意思是:将pulse_width_max里的值作为数值赋到寄存器A里.MOV A,pulse_width_max 它的意思是:将pulse_width_max里的值作为地址赋到寄存器A里. 相关帖子>>>: ?我的8个PWM给你参考(2774字)coody[63次]2006-8-29 15:01:43 ;************************************************************** ?;************************************************************** ?T0interrupt: ;max 53T ? PUSH PSW ? PUSH ACC ? ?;*************************** 30T *********************************** ? MOV P1,PWM_TEMP ? ? INC PWM_DUTY ? MOV A,PWM_DUTY ? JNZ L_PWM ? MOV PWM_TEMP,PWM_TEMP1 ? SJMP L_QuitPWM ?

?L_PWM: ? CJNE A,PWM0,L_NotClearPWM0 ? SETB B_PWM0 ?L_NotClearPWM0: ? ? CJNE A,PWM1,L_NotClearPWM1 ? SETB B_PWM1 ?L_NotClearPWM1: ? ? CJNE A,PWM2,L_NotClearPWM2 ? SETB B_PWM2 ?L_NotClearPWM2: ? ? CJNE A,PWM3,L_NotClearPWM3 ? SETB B_PWM3 ?L_NotClearPWM3: ? ? CJNE A,PWM4,L_NotClearPWM4 ? SETB B_PWM4 ?L_NotClearPWM4: ? ? CJNE A,PWM5,L_NotClearPWM5 ? SETB B_PWM5 ?L_NotClearPWM5: ? ? CJNE A,PWM6,L_NotClearPWM6 ? SETB B_PWM6 ?L_NotClearPWM6: ? ? CJNE A,PWM7,L_NotClearPWM7 ? SETB B_PWM7 ?L_NotClearPWM7: ?L_QuitPWM: ?;************************************************************** ? ?L_QuitT0Interrupt: ? POP ACC ? POP PSW

汇编语言例子

实验三: 1)题目:在内存中从ARRAY开始的连续三个字节单元存放着30H,40H,50H。编制程序将这三个连续的数据传送到内存TABLE开始的单元。 DATA SEGMENT ARRAY DB 30H,40H,50H 定义数据段 TABLE DB 3 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,ARRAY LEA DI,TABLE MOV CX,3 REP MOVSB JMP $ CODE ENDS END START (2)题目:把内存2000H和3000H字单元的内容相加,结果存入4000H单元。(不考虑溢出) DATA SEGMENT ORG 2000H DW 1234H ORG 3000H DW 5678H ORG 4000H DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,[2000H] ADD AX,[3000H] MOV [4000H],AX JMP $ CODE ENDS END START 实验四 1、数据传送指令和算术运算指令完成NUM1和NUM2相加,结果放入SUM中。

DATA SEGMENT NUM1 DW 0012H,0030H,0FC21H ; 数1 NUM2 DW 3E81H,44E9H,6D70H ; 数2 SUM D W 3 DUP(?) ; 结果单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX,3 LEA SI,NUM1 LEA DI,NUM2 LEA AX,SUM HE: MOV BX,[SI] ADD BX,[DI] MOV [AX],BX INC SI INC DI INC AX LOOP HE MOV AH, 4CH ; 返回DOS INT 21H CODE ENDS END START 2、内存中自TABLE开始的七个单元连续存放着自然数0至6的立方值(称作立方表)。;任给一数X(0≤X≤6)在XX单元,查表求X的立方值,并把结果存入YY单元中。;提示用XLAT指令 DATA SEGMENT TABLE DB 0H,1H,2H,3H,4H,5H,6H XX DB 1 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TABLE MOV AL,[XX] XLAT MOV DL,AL MOV AH,02H INT 21H JMP $

汇编语言程序例题

【例】试编写一程序计算以下表达式的值。 w=(v-(x*y+z-540))/x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。 DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP() DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK START:MOV AX,DATA MOV DS,AX ;DATA→AX MOV AX,X IMUL Y ;(X)*(Y)→DX:AX MOV CX,AX

MOV BX,DX ;(DX:AX)→(BX:CX) MOV AX,Z CWD ;(Z)符号扩展 ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)→(BX:CX) SUB CX,540 SBB BX,0 ;(BX:CX)-540→(BX:CX) MOV AX,V CWD ;(V)符号扩展 SUB AX,CX SBB DX,BX ;(DX:AX)-(BX:CX)→(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商→W MOV W+2,DX ;余数DX→W+2 MOV AH,4CH INT 21H CODE ENDS ;退出DOS 状态 END START 【例】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB 80,85,86,71,79,96 DB 83,56,32,66,78,84 NO DB 10 ENGLIST DB DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE BEGIN:MOV AX,DATA MOV DS ,AX LEA BX,TAB MOV AL,NO DEL AL XLAT T AB MOV ENGLISH,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN

汇编语言典型例题

典型例题(与考试题型,考试范围相近) 1.应用程序具有3个基本段,可执行指令应该保存于( A )。 A) 代码段B) 数据段C) 堆栈段D) 附加段 2. 8位补码F3H要扩展成16位补码应该是( D ),这样其真值才不变。 A) F0F3H B) 00F3H C) 10F3H D) FFF3H 3. “mov [ebx+8],eax”指令的目的操作数采用( C )寻址方式。 A) 存储器间接B) 寄存器C) 寄存器相对D) 立即数 4. 执行“sar ebx,1”指令后,ebx最高D31位一定等于( D ) A) 0 B) 1 C) D0位D) D30位 5. 在代码段内的-128~127个字节前后范围的跳转,可以用( C )类型名表示。 A) WORD B) DWORD C) SHORT D) FAR 6. 在Windows控制台环境,在当前光标显示信息应该使用( B )函数(功能)。 A) ReadConsole B) WriteConsole C) MessageBox D) GetStdHandle 7.汇编语言源程序经汇编后不能直接生成( C ) A) OBJ文件B) LST文件C) EXE文件D) CRF文件 8.在ADD指令中,两个操作数的物理位置不可以安排在( A )中。 A) 两个主存储单元 B) 一个主存储单元和一个数据寄存器 C) 两个数据寄存器 D) 一个堆栈单元和一个数据寄存器 9.假定ax=6987h,执行指令cmp ax,0eb30h后,则标志位CF和OF的状态( C )。 A)0,0 B) 0,1 C) 1,0 D) 1,1 10.假定esp=00120100h,eax=1f6c2107h,执行指令push ax后,存放数据07h的物理地址是( C )。 A) 00120104h B) 00120101h C) 001200fch D) 001200ffh 11.下列对标志寄存器中标志位产生影响的指令是( B ) A) jmp done B) shl eax, 2 C) call subp D) not eax 12. 假设CL=98H, 执行“MOVSX DX, CL”后,DX=( D ) A) F098H B) 0098H C) 1098H D) FF98H 13. “mov 80h[esi], eax”指令的目的操作数采用( C )寻址方式。

汇编语言程序例题

【例5.1】试编写一程序计算以下表达式的值。 w=(v-(x*y+z-540))/x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图5.1所示。

DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP(?) DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK START: MOV AX,DATA MOV DS,AX ;DATA→AX MOV AX,X IMUL Y ;(X)*(Y)→DX:AX MOV CX,AX

MOV BX,DX ;(DX:AX)→(BX:CX) MOV AX,Z CWD ;(Z)符号扩展 ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)→(BX:CX) SUB C X,540 SBB BX,0 ;(BX:CX)-540→(BX:CX) MOV AX,V CWD ;(V)符号扩展 SUB AX,CX SBB DX,BX ;(DX:AX)-(BX:CX)→(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商→W MOV W+2,DX ;余数DX→W+2 MOV AH,4CH INT 21H CODE ENDS ;退出DOS 状态 END START 【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB 表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:

汇编教程汇编语言编程实例

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microso ft Access 97) . 注意:如果你使用的windows.inc 是1.18及其以下版本,在开始编译之前要修改其中的一个小bug.在windows.inc中查找 "SQL_NULL_HANDLE",将得到下面这行: SQL_NULL_HANDLE equ 0L 将0后面的"L"删除,象这样: SQL_NULL_HANDLE equ 0 这个程序是一个基于对话框的程序,有一个简单的菜单.当用户选择"connect"时,它将试图连接test.mdb数据库,如果连接成功,将显示由ODBC驱动程序返回的完整连接字符串.接下来,用户可选择"View All Records"命令,程序会使用listview control来显示数据库中的所有数据.用户还可以选择"Query"命令来查询特定的记录.例子程序将会显示一个小对话框提示用户输入想找的人名.当用户按下OK钮或回车键,程序将执行一个查询来查找符合条件的记录.当用户完成对数据库的操作时,可以选择"disconnect"命令与数据库断开连接. 现在看一下源程序: .386 .model flat,stdcall include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\odbc32.inc include \masm32\include\comctl32.inc include \masm32\include\user32.inc includelib \masm32\lib\odbc32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib IDD_MAINDLG equ 101 IDR_MAINMENU equ 102 IDC_DATALIST equ 1000 IDM_CONNECT equ 40001 IDM_DISCONNECT equ 40002 IDM_QUERY equ 40003 IDC_NAME equ 1000 IDC_OK equ 1001 IDC_CANCEL equ 1002 IDM_CUSTOMQUERY equ 40004 IDD_QUERYDLG equ 102 DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

汇编语言程序格式习题

8086汇编语言程序习题 一. 单项选择题 1.下列选项中不能作为名字项地是(). A.FH B.A3 C.3B D.FADC 2.下列指令不正确地是(). A.MOV AL,123 B.MOV AL,123Q C.MOV AL,123D D.MOV AL,123H 3.下列指令不正确地是(). A.MOV BL,OFFSET A B.LEA BX,A C.MOV BX,OFFSET A D.MOV BX,A 4.若定义“BUF DB 1,2,3,4”,执行MOV AL,TYPE BUF 后AL=(). A.0 B.1 C.2 D.3 5.若定义“A EQU 100”,执行“MOV AX,A”后,AX=(). A.A地偏移地址 B.A单元中地内容 C.100 D.A地段地址 6.若定义“B DW 1,2,10 DUP(0)”,则该伪指令分配()字节单元. A.10 B.20 C.22 D.24 7.若定义“C DD 2,4”,则该伪指令分配()个字节单元. A.2 B.4 C.6 D.8 8、伪指令是()规定地汇编说明符,它在源程序汇编时进行说明. A、DEBUG B、LINK C、MASM D、EDIT 9.在上机操作过程中,MASM命令执行后,除了生成一个目标文件外,根据选择还可以生成一个()文件. A..LST B..EXE C..MAP D..ASM 10.LINK命令执行后可以生成一个以()为扩展名地文件. A.ASM B.EXE C.OBJ D.COM 11.一个段最大可定义()字节. A.1M B.64K C.32K D.16K 12.若要求一个段地起始位置能被256整除地单元开始,在定位方式选项中应选(). A.BYTE B.WORD C.PARA D.PAGE

汇编语言程序实例

一:题目 编写求十进制数12678532与41412042(本人学号)之和的程序,并将和以十进制数的形式送屏幕显示。 二:要求 (1)两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。 (2)和以压缩十进制数的形式存入SUM以下单元。 (3)将和送到屏幕显示部分功能的实现采用子程序的形式。三:算法设计 1:程序 DATAS SEGMENT ;此处输入数据段代码 ADD1 DD 12678532H ADD2 DD 41412042H SUM DD ? DATAS ENDS STACKS SEGMENT STACK 'STACK';此处输入堆栈段代码 DW 100H DUP(?) TOP LABEL WORD STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX ; LEA SP,TOP LEA SI,ADD1 LEA DI,ADD2 MOV AL,[SI] ADD AL,[DI] DAA MOV BYTE PTR SUM,AL MOV AL,[SI+1] ADC AL,[DI+1] DAA MOV BYTE PTR SUM+1,AL MOV AL,[SI+2] ADC AL,[DI+2] DAA MOV BYTE PTR SUM+2,AL

MOV AL,[SI+3] ADC AL,[DI+3] DAA MOV BYTE PTR SUM+3,AL MOV AX,WORD PTR SUM+2 CALL DISPAX MOV AX,WORD PTR SUM CALL DISPAX ; MOV AH,4CH INT 21H DISPAL PROC NEAR PUSH AX PUSH CX PUSH DX PUSH AX MOV CL,4 SHR AL,CL CALL CHANG MOV AH,02 MOV DL,AL

相关主题