汇编语言例程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编写程序,比较两个字符串STR1和STR2是否相同。如果相同,则把1送入变量RESULT中;如果不同,则把0送入变量RESULT中。

DATASEG SEGMENT
STR1 DB ‘The program is too long.’
LEN1 EQU $-STR1
STR2 DB ‘The program is not long.’
LEN2 EQU $-STR2
RESULT DB ?
DATASEG ENDS
CODESEG SEGMENT
ASSUME CS: CODESEG, DS: DATASEG, ES: DATASEG
BEGIN: MOV AX, DATASEG
MOV DS, AX
MOV ES, AX
MOV CX, LEN1
CMP CX, LEN2
JNE NOSAME
LEA SI, STR1
LEA DI, STR2
CLD
REPE CMPSB
JNE NOSAME
MOV RESULT, 1
JMP STOP
NOSAME: MOV RESULT, 0
STOP: MOV AH, 4CH
INT 21H
CODESEG ENDS
END BEGIN


编写程序,把数组ARRAY中的100个16位带符号数按从小到大的顺序排列。

DATASEG SEGMENT
ARRAY DW 100 DUP(?)
LEN EQU ($-ARRAY)/2
DATASEG ENDS
CODESEG SEGMENT
ASSUME CS: CODESEG, DS: DATASEG
BEGIN: MOV AX, DATASEG
MOV DS, AX
MOV DX, LEN-1
AGAIN: LEA SI, ARRAY
MOV DI, SI
INC DI
INC DI
MOV CX, DX
GOON: MOV AX, [SI]
CMP AX, [DI]
JLE SKIP
XCHG AX, [DI]
XCHG AX, [SI]
SKIP: INC SI
INC SI
INC DI
INC DI
LOOP GOON
DEC DX
JNE AGAIN
MOV AH, 4CH
INT 21H
CODESEG ENDS
END BEGIN


阅读下面的汇编语言程序,写出程序执行后屏幕上显示的内容。(本题20分)
DATA SEGMENT
HEX DW 0F000H, 2007H, 1FFFH, 9999H, 0C8H
COUNT EQU ($-HEX)/2
STR DB 0DH, 0AH, 5 DUP(‘ ’), ‘$’
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET HEX
MOV CX, COUNT
NEXT: MOV AX, [BX]
CALL HTOD
INC BX
INC BX
LOOP NEXT
MOV AH, 4CH
INT 21H
HTOD PROC NEAR
PUSH BX
MOV BX, 10
MOV SI, OFFSET STR+6
GOON: MOV DX, 0
DIV BX
ADD DL, 30H
MOV [SI], DL
DEC SI
CMP AX, 0
JNE GOON
MOV DX, OFFSET STR
MOV AH, 9
INT 21H
POP BX
RET
HTOD ENDP
CODE ENDS
END BEGIN

这个程序是十六进制数转十进制字符串并输出(答案有点问题,输出串应该每次先用空格初始化)

61440
8199
8191
39321
200


阅读下面的汇编语言程序,写出程序执行后变量X1、X2、X3、X4的内容。

DATA SEGMENT
STRING DB ‘The price is $500.’
COUNT EQU $-STRING
X1 DB ?
X2 DB ?
X3 DB ?
X4 DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET STRING
MOV CX, COUNT
MOV BX, 0
MOV DX, 0
GOON: MOV AL, [SI]
CMP AL, ‘0’
JB L1
CMP AL, ‘9’
JBE L4
CMP AL, ‘A’
JB L1
CMP AL, ‘Z’
JBE L2
CMP AL, ‘a’
JB L1
CMP AL, ‘z’
JBE L3
L1: INC DL
JMP NEXT
L2: INC BH
JMP NEXT
L3: INC BL
JMP NEXT
L4: INC DH
NEXT: INC SI
LOOP GOON
MOV X1, BH
MOV X2, BL
MOV X3, DH
MOV X4, DL
MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN


请用80x86汇编语言编写程序,把缓冲区BLOCK中的正负数分开。其中正数存入POSITIVE缓冲区,负数存入NEGATIVE缓冲区。

DATA SEGMENT
BLOCK DW -6, 5, 0, -3, -1, -8, 2, 10, -5, -3, 7, 9, -2


COUNT EQU ($-BLOCK)/2
POSITIVE DW COUNT DUP(0)
NEGATIVE DW COUNT DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
BEGIN: MOV AX, DATA
MOV DS, AX
LEA BX, BLOCK
LEA SI, POSITIVE
LEA DI, NEGATIVE
MOV CX, COUNT
GOON: MOV AX, [BX]
CMP AX, 0
JGE ABOVE
MOV [DI], AX
INC DI
INC DI
JMP NEXT
ABOVE: MOV [SI], AX
INC SI
INC SI
NEXT: INC BX
INC BX
LOOP GOON
MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN


(0也当成正数了)

阅读下面的汇编语言程序,写出程序执行后屏幕上显示的内容。(本题15分)
DATA SEGMENT
STR DB 0DH, 0AH, 3 DUP(‘ ’), ‘$’
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV CX, 1
NEXT: CMP CL, 0
JE STOP
MOV AX, CX
CALL HTOD
SAL CX, 1
JMP NEXT
STOP: MOV AH, 4CH
INT 21H
HTOD PROC NEAR
MOV BX, 10
MOV SI, OFFSET STR+4
GOON: MOV DX, 0
DIV BX
ADD DL, 30H
MOV [SI], DL
DEC SI
CMP AX, 0
JNE GOON
MOV DX, OFFSET STR
MOV AH, 9
INT 21H
RET
HTOD ENDP
CODE ENDS
END BEGIN

(128再左移位就成0了)
1
2
4
8
16
32
64
128

1.程序如下:
DSEG SEGMENT
STR DB “The program is running.”
COUNT EQU $-STR
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
BEGIN: MOV AX, DSEG
MOV DS, AX
MOV SI, OFFSET STR
MOV CX, COUNT
GOON: LODSB ;(si->al si+=1)
CMP AL, 'a'
JB SKIP
CMP AL, 'z'
JA SKIP
SUB AL, 32
SKIP: MOV DL, AL
MOV AH, 2
INT 21H
LOOP GOON
MOV AH, 4CH
INT 21H
CSEG ENDS
END BEGIN


已知数组ARRAY中包含下列元素:-9、6、10、-2、-8、1、5、-12、-3、4、15、9、0、-5、-20、11、18、-14、16、-13,请编写程序找出其中的最小元素和最大元素,分别把它们存入MIN和MAX单元。

DATA SEGMENT
ARRAY DW -9, 6, 10, -2, -8, 1, 5, -12, -3, 4, 15, 9, 0, -5, -20, 11, 18, -14, 16, -13
COUNT EQU ($-ARRAY)/2
MIN DW ?
MAX DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV CX, COUNT
MOV BX, OFFSET ARRAY
MOV AX, [BX]
MOV DX, [BX]
GOON: CMP AX, [BX]
JGE SKIP1
MOV AX, [BX]
SKIP1: CMP DX, [BX]
JLE SKIP2
MOV DX, [BX]
SKIP2: INC BX
INC BX
LOOP GOON
MOV MAX, AX
MOV MIN, DX
MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN



请用80x86汇编语言编写程序,从数组3、-6、2、-4、0、-9、-1、5、4、7、-3、8中查找给定的元素(此元素可由考生任意指定),数组的长度保存在变量LEN中。如果找到,则把该元素从数组中删除,并且修改数组的长度;如果未找到,则不做任何处理。

DATA SEGMENT
ARRAY DW 3,-6,2,-4,0,-9,-1,5,4,7,-3,8
COUNT EQU ($-ARRAY)/2
ITEM DW 5
LEN DW COUNT

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
MOV DS,AX
LEA BX,ARRAY-2
MOV CX,COUNT

MOV AX,ITEM

GOON:INC BX
INC BX
CMP AX,[BX]
LOOPNE GOON
JNE STOP

JCXZ SKIP ;(如果是最后一个数,则不需要删除,只修改长度)

DE

LETE:MOV AX,[BX+2]
MOV [BX],AX
INC BX
INC BX

LOOP DELETE

SKIP:DEC LEN
STOP:MOV AH,4CH
INT 21H
CODE ENDS

END BEGIN


请用80x86汇编语言编写程序,从键盘输入一个不超过4位的十进制数,把该数的值保存到变量VALUE中。要求程序能对非法输入(指按下了非数字键)进行检测,并在屏幕上显示该十进制数,当用户按回车键时表示输入结束。



DATA SEGMENT
VALUE DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
MOV DS,AX
MOV BX,0

MOV CX,4


GOON:MOV AH,7
INT 21H
CMP AL,0DH

JE STOP


CMP AL,‘0’
JB GOON
CMP AL,‘9’

JA GOON

MOV DL,AL
MOV AH,2

INT 21H

SAL BX,1 ;(*2)
MOV DX,BX
SAL BX,1 ;(*2)
SAL BX,1 ;(*2)

ADD BX,DX :(*2+*8)
;(3分)

AND AL,0FH
MOV AH,0
ADD BX,AX

LOOP GOON
;(3分)

STOP:MOV VALUE,BX
MOV AH,4CH
INT 21H
CODE ENDS

END BEGIN



请用80x86汇编语言编写程序,从键盘输入一个字符串,把其中所有的小写字母转换成对应的大写字母,然后在屏幕输出该字符串。


DATA SEGMENT
STRING DB 255
DB ?
DB 255 DUP(?)

DATA ENDS


CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
MOV DS,AX
LEA DX,STRING
MOV AH,10

INT 21H


LEA SI,STRING+2
MOV CL,STRING+1
MOV CH,0

CLD

GOON:LODSB
CMP AL,”a”
JB SKIP
CMP AL,”z”
JA SKIP

SUB AL,32

SKIP:MOV DL,AL
MOV AH,2
INT 21H

LOOP GOON

MOV AH,4CH
INT 21H
CODE ENDS

END BEGIN


请用80x86汇编语言编写程序,把数组12、3、8、19、5、10、6、15、22、17、4、11中的所有元素以十六进制数的形式在屏幕上输出,要求每行输出一个元素。

DATA SEGMENT
ARRAY DW 12,3,8,19,5,10,6,15,22,17,4,11
COUNT EQU ($-ARRAY)/2
BUFF DB 0DH,0AH,4 DUP(?),”$”

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
MOV DS,AX
LEA BX,ARRAY

MOV CX,COUNT

GOON:MOV AX,[BX]
MOV DX,AX
CALL SHOW
INC BX
INC BX
LOOP GOON
MOV AH,4CH

INT 21H

SHOW PROC
PUSH BX
PUSH CX
LEA BX,BUFF+2

MOV CX,4
;(2分)

NEXT:MOV AX,DX
ROL AX,1
ROL AX,1
ROL AX,1
ROL AX,1

MOV DX,AX

AND AL,0FH
CMP AL,9
JBE SKIP
ADD AL,7
SKIP:ADD AL,48
MOV [BX],AL
INC BX

LOOP NEXT

LEA DX,BUFF
MOV AH,9
INT 21H
POP CX
POP BX
RET
SHOW ENDP
CODE ENDS

END BEGIN





相关文档
最新文档