当前位置:文档之家› IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(著)答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(著)答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(著)答案
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(著)答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美明,温冬蝉著)答案

第三章答案1-22

1.

(1)立即寻址没有

(2)直接寻址 7237H

(3)使用BX的寄存器寻址没有

(4)使用BX的间接寻址 637DH

(5)使用BX的寄存器相对寻址 0D5F0H

(6) 基址变址寻址 8E18H

(7)相对基址变址 004FH

2.根据下列要求,写出相应的汇编指令。

(1)ADD DX,BX

(2) ADD AL,[BX][SI]

(3) ADD [BX][0B2H], CX

(4) MOV AX,2A59H ADD [0524H] ,AX

(5) ADD AL ,0B5H

3.

(1)寄存器间接寻址

MOV BX,OFFSET [BLOCK][0AH]

MOV DX ,[BX]

(2)寄存器相对寻址

MOV SI,OAH

MOV DX,[BLOCK][SI]

(3)基址变址寻址

MOV BX ,BLOCK

MOV SI,OAH

MOV DX,[BX][SI]

4. 现有(DS)=2000H, (BX)=0100H, (SI)=0002H,(20100)=12H, (20101)=34H,(20102)=56H, (20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容。

(1)MOV AX,1200H 1200H

(2) MOV AX,BX 0100H

(3) MOV AX,[1200] 4C2AH 注意,是字单元!!

(4)MOV AX,[BX] 同上

(5)MOV 1100[BX] 4C2AH

(6) MOV AX,[BX][SI] 7856H

(7) MOV AX,1100[BX][SI] 65B7H

5.(1) 7CD9H (2) 1200H (3) 6319H

6. MOV BX,2000H

LES DI ,[BX]

MOV AX, ES:DI

7.转向地址OBJ的值分别为:(1)064DH (2)0691H (3)05E0H

注意有符号数的符号位

8.(1) MOV AX,0ABH 立即数寻址无物理地址

(2) MOV AX,BX 寄存器寻址同上

(3) MOV AX,[100] 直接寻址 20100H

(4) MOV AX,VAL 直接寻址 20050H

(5) MOV AX,[BX] 寄存器间接寻址 20100H

(6) MOV AX,ES:[BX] 直接寻址 21100H

(7) MOV AX,[BP] 寄存器间接寻址 20010H

(8)MOV AX,[SI] 同上 200A0H

(9) MOV AX,[BX+10] 寄存器相对寻址 20110H

(10)MOV AX,VAL[BX] 同上 20150H

(11) MOV AX,[BX][SI] 基址变址寻址 201A0H

(12) MOV AX,VAL[BX][SI] 相对基相变址寻址 201F0H

9.(1)的指令: MOV AX, [BX][0CH] MOV ZREO ,AX

(2) 的指令: MOV AX,ARRAY[BX] MOV ZREO,AX

10. MOV AX,TABLE 是把符号地址TABLE里的内容送到AX里,指令执行完后,(AX)=1234H

LEA AX,TABLE 是把符号地址TABLE 的有效地址(这里是偏移量)送到指定寄存器AX里,指令执行完后,(AX)=0032H

11. 执行完指令后,(AX)=1E00H

12. LEA AX,CSTRING

MOV DL,AX

MOV DH,[AX+6]

13. 这参考课本P51--P53

14.LES BX,[2000]

MOV AX,ES:[BX]

15.运算结果 SF,ZF,CF,OF各位的值(从左至右依次往下~)

(1) 74D4H 0 0 0 0

(2) A5C1H 1 0 0 1

(3) 4240 H 0 0 1 0

(4) 0000 H 0 1 1 0

16.接上表~

(1) 5D14 0 0 0 0

(2) A870 1 0 0 1

(3) D870 1 0 0 0

(4) 34E4 0 0 1 0

17.

(1).MOV AX,Z ;把Z送到AX

SUB AX,X ;Z-X

ADD AX,W ;W+(Z-X)

MOV Z,AX ;结果保存在Z中

(2). MOV AX,R ;R送到AX中

ADD AX,9 ;R+9

MOV BX,X ;X送到BX中

ADD BX,6 ;X+6

ADD AX,BX ;(R+9)+(X+6),结果保存在AX中

MOV BX,W ; W送到BX中

SUB BX,AX ; W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和~~ MOV Z,BX ;最终结果送到Z中

(3)

MOV AX,W ;把W送到AX

IMUL X ;W*X 注意:低十六位保存在AX里,高十六位保存在DX里

MOV BX,Y ;把Y送到BX 里

ADD BX,6 ;Y+6

IDIV BX ;(W*X)/(Y+6) 注意:商保存在AX里,余数保存在DX里

MOV Z,AX ;把商送到Z中,

MOV R,DX ;把余数送到R中

(4)

MOV AX,W ;把W送到AX中

SUB AX,X ;W-X

CWD ;把AX中的十六位带符号数扩展成为32位,低十六位保存在AX中,高十六位保;在DX中

MOV BX,5 ;把5送到BX中

IDIV BX ;(W-X)/5 被除数为32位,除数为16位商为16位IMUL Y ;上一步结果再乖以Y,积为32位

MOV BX,2 ;把2送到BX中

IMUL BX ;上一步乘法所得的积再乘以2,各为64位

MOV Z,EAX ;把结果中低32位放入Z双字单元中

MOV [Z+4],EDX ;把结果中高32位放入Z+4双字单元中

18.

指令本条指令执行完后AX的内容执行完后CF,SF,ZF的值

MOV AX,1234H 1234H 0 0 0

MOV CL,4 1234H 0 0 0

ROL AX,CL 2341H 1 0 0

DEC AX 2340H 1 0 0

MOV CX,4 2340H 1 0 0

MUL CX 8918H 0 0 0

INT 20H

程序结束后,(AX)=8918H (DX)=0000H

19.

指令执行完后AX的内容执行完后CF ,SF,ZF和OF的值

MOV AX,0 0 0010

DEC AX FFFFH 0100

ADD AX,7FFFH 7FFEH 0000

ADD AX,2 8000H 0101

NOT AX 7FFFH 0101

SUB AX,0FFFFH 8000H 1101

ADD AX,8000H 0000H 1011

SUB AX,1 FFFFH 1101

AND AX,58D1H 58D1H 0000

SAL AX,1 B1A2H 0101

SAR AX,1 D8D1H 0100

NEG AX 272FH 1000

ROR AX,1 9397H 1001

20.

(1)MOV AX,DATAX

ADD DATAY,AX

(2)MOV AX,DATAX

ADD DATAY,AX

MOV AX,[DATAX+2]

ADD [DATAY+2] ,AX

(3)本組指令的作用是:BX <------[DATAX]+[DATAY]+[1](CF的值) 帶進位加法~ (4)MOV AX,DATAX

MUL DATAY ;結果的高十六位保存在DX裏,低十六位保存在AX裏

(5)MOV AX,DATAX

MOV DX,[DATAX+2]

MUL DWORD DATAY;;

(6)MOV AX,DATAX

DIV 17H ;結果商保存在AL中,余數在AH中

(7)MOV AX,DATAX

CDW

DIV DATAY

21.NEG DX

NEG AX

SBB DX,0

22.

MOV AX,A ;把雙字長數的低字放到AX中

MOV DX,[A+2] ;把雙字長數的高字放到DX中

TEST DX,8000H ;測試雙字長數的符號

JZ RIGHT ;如果是非負數,則直接保存

NEG DX ;如果是負數,則求補

NEG AX

SBB DX,0

RIGHT: MOV B ,AX

MOV [B+2],DX

23.每條指令單獨執行完後的結果依次為:

(1) 9AH (2)61H (3)0FBH (4)1CH (5)0 (6)0E3H

24.執行指令序列後,BX的內容為:0DAH

25.

(1)把53D乘以2的程序:

MOV AX,35H ;53D=35H

SHL AX ,1

(2)把53除以2 的程序:

MOV AX,35H

SHR AX,1

其他的同理~~

26.這段程序完成的功能是:把DX:AX中的雙字數據左移4位(相當於乘以16D)

27.各條指令單獨執行後,DX的值依次為:

(1) 5CH (2)17H (3)05C8H (4)72H (5)2017H (6)0CDH (7)0172H (8)05CCH (9)0DCH

28.該程序段執行完後,BX寄存器的內容是:C02DH

29.(1)从左到右把CONMAE中的字符串伟送到PRLINE的程序实现:

LEA SI,CONAME ;把CONAME中第一个字节的偏移地址送到SI中

LEA DI,PRLINE ;把PRLINE中第一个字节的偏移地址送到DI中

MOV CX,20 ;把重复次数放到CX里

CLD ;让SI DI从低地址指向高地址(即从左到右传送)

REP MOVSB ;传送

(2)从右到左把CONMAE中的字符串传送到PRLINE中的程序实现:

LEA SI ,CONAME

LEA DI,PRLINE

MOV CX,20

STD ;和上面唯一不同的就是这次是从右到左,所以要从高地址指向低地址

REP MOVSB

(3)把CONAME中的第三和第四個字節裝入AX的程序實現:

LEA SI ,[CONAME+3]

LODSW

(4)把AX寄存器的內容存入從PRLINE+5開始的字節中的程序實現:

LEA DI ,[PRLINE+5]

STOSW

(5)檢查CONAME字符串中有無空格字符,如有把它偉送給BH寄存器的程序實現:

LEA DI,CONAME ;把CONAME中第一個字符偏移地址放入DI中

MOV CX,20 ;把重複次數放到CX中

MOV AL,20H ;把空格符的ASCII值放入AL中

CLD ;从低到高

REPNE SCASB ;比較

MOV BH,[DI-1]R ;把檢查到的空格符送到BH中

30.

MOV CX,12H ;把重複次數放到CX中。這裏用十六進制表示MOV SI,0 ;初始化SI

MOV AX,26H ;把&字符的ASCII值放入AX

CHECK: CMP AX,STRING[SI] ;依次查找

INC SI

LOOPNE CHECK ;找到了就退出

MOV AX,20H ;把空格符的ASCII值勤放入AX中

MOV STRING[SI-1],AX ;用空格符代替&

31。(1)用空格符清除PRINT_LINE域的程序实现:

MOV AL,20H

LEA DI ,PRINT_LINE

MOV CX,132

CLD

REP STOSB

(2)在STUDENT_ADDR中查找第一个’_‘的程序实现:

MOV AX,2DH ;把“—”的ASCII值放入AX

MOV SI,0 ;初始化SI

MOV CX,9 ;把重複次數放入CX中

;依次檢查STUDENT-ADDR中的字符是否為"_",找到第一个停下来CHECK:CMP AX ,STUDENT_ADDR[SI] ;

INC SI;

LOOPNZ CHECK;

(3)在STUDENT_ADDR中查找最后一个”_“的程序实现:

;和第二題不同的就是這次是從右到左查詢,所以SI的初始化為9 MOV AX,2DH;

MOV SI ,9;

MOV CX,9;

CHECK :CMP AX,STUDENT_ADDR[SI]

DEC SI;

LOOPNZ CHECK;

(4)程序實現:

MOV AL,2OH ;把空格符的ASCII值放入AL中

LEA DI ,STUDENT_NAME ;把STUDENT_NAME中第一个字符偏移地址放到DI中MOV CX,30 ;把重复次数放到CX中

CLD ;让DI从低位移到高位REPZ SCASB ;如果有不是空格符的,就退出JZ STORE ;如果全是空格符,就转到STORE中

;用*代替空格

STORE:MOV AL 2AH

MOV CX ,30

STD ;注意,这里是把前面从低到高移动的DI再从高到低移上去~~ REP STOSB

(5)程序实现:

;把STUDENT_NAME 移到PRINT_LINE的前30个字节中

LEA SI, STUDENT_NAME

LEA DI,PRINT_LINE

MOV CX ,30

CLD

REP MOVSB;把STUDENT_ADDR移到PRINT_LINE的后9个字节中

LEA SI ,[STUDENT_ADDR+9]

LEA DI,[PRINT_LINE+132]

MOV CX,9

STD

REP MOVSB

32.程序实现:

。。。

LEA SI,OLDS

LEA DI,NEWS

MOV CX,5

REPZ CMPSB

JNZ NEW_LESS

。。。

33.

(1)CMP DX,CX

JA EXCEED

(2)CMP BX,AX

JG EXCEED

(3)CMP CX,0

JZ ZERO

(4)CMP BX,AX

JO OVERFLOW

(5)CMP BX,AX

JLE EQ_SMA

(6) CMP DX,CX

JBE EQ_CX

34.(1)跳转到:L1

(2)跳转到L1

(3)跳转到L2

(4)跳转到L5

(5)跳转到L5

35.

(1)可以引起转移到L1的指令有: NB ,BE ,NL ,LE

(2)可以引起转移到L1的指令有:同上

(3)可以引起转移到L1的指令有: B,BE ,L , LE

(4)可以引起转移到L1的指令有: NB ,NBE ,NL ,NLE

(5)可以引起转移到L1的指令有:同上

(6)可以引起转移到L1的指令有:同(3)

(7)可以引起转移到L1的指令有:同上

36。

37.程序流程图就不画了,程序如下~~

MOV AL,STAUS[SI] ;把要测试的字节放到AL中

AND AL,2AH ;把第一,三,五位为一其他位为0的数--2AH,与这个字节比较,结果放到AL 中

JZ ROUTINE_4 ;如果结果为0,则三位都为0

XOR AL,2AH ;前面相与的结果再与2AH异或

JZ ROUTINE_1 ;如果结果为0,则三位都为1

BSF BL,AL ;

BSR BL ,AL

CMP BL,CL

;如果向前和向后测试后,第一个1 的位置相同,说明只有一个1,则异或运算前有AL中有两个1 JE ROUTINE_2

ROUTINE_1

注:本题还有其他解法,请大家自己试试~~

38.(1)当括号内是:LOOP时,循环四次,程序结束后

(AX)=05 (BX)= 16 (CX)=0 (DX)=0

(2)当括号内是: LOOPE 时,不循环,程序结束后

(AX)=02 (BX)=04 (CX)=03 (DX)=02

(3)当括号内是:LOOPNE 时:循环三次,程序结束后

(AX)=04 (BX)=11 (CX)=01 (DX)=0

第四章答案

1。下列指令的错误

(1) MOV AH,BX 源操作数与目的操作数长度不相同~

(2) MOV [BX],[SI] 这是两个内存单元在传递数据,而这在汇编语言中是不允许的~~~ (3) MOV AX,[SI][DI] 不能用两个变址连用,其中一个应为基址~

(4) MOV MYDAT[BX][SI],ES:AX 同(2)

(5) MOV BYTE PTR[BX],1000 必须有一个为寄存器

(6)MOV BX,OFFSET MYDAT[SI] OFFSET 不能与复杂操作数相连~

(7)MOV CS,AX 不能对CS赋值~

(8)MOV ECX,AX 操作数类型不同~

2。(1)合法(2)非法(3)非法(4)非法

3。(1)非法,操作数类型不同

(2)合法

(3)非法,不允许两个内存单元直接传递数据,你把人家CPU放哪了?~~~呵~ (4)合法~

(5)合法~

(6)合法

(7)非法~,必须有一个寄存器~~把CPU放哪了?~~

(8)非法,两个内存单元地址相加没有意义~

(9)合法

(10)非法,同(3)

4。(1)两内存单元传递数据

(2)操作数类型不同

(3)跳转指令只能跳转到符号地址

(4)转移指令后不能为变量,只能为标号

(5)格式不对,应为 NEAR PTR 。。。

5。图,就不画了~~

6。(1)DW 5150H

(2)MOV AX,5150H

MOV ADDRESS ,AX ;等,写出几个就可以~~

7。DATASG SEGMENT

FLD1B DB 'personal computer'

FLD2B DB 10 DUP (32)

FLD3B DB 20H

FLD4B DB 01011001B

FLD5B DB '32654'

FLD6B DB 10 DUP (0)

FLD7B DB 'PART1',DUP 20 (?),'PART2',DUP 50 (?),'PART3',DUP 14 (?) FLD1W DW 0FFF0H

FLD2W DW 01011001B

FLD3W DW FLD7B

FLD4W DW 5,6,7,8,9

FLD5W DW 5 DUP (0)

FLD6W DW (FLD6W-FLD1W)-(FLD7B-FLD1B)

8。PLENTH 的值为22,GE表示该数据段的长度~

9。L的值为7

10。(1)MOV AX,OFFSET LNAME

(2)MOV SI,WORD PTR CODE_LIST

(3)CODE_LENGHT EQU $-CODE_LIST

11。代码如下:

DATA_SEG SEGMENT

DB 5

DATA_LIST DW 0FFFFH,0,2,5,4, 5 DUP (?)

DATA_SEG ENDS

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG,DS:DATA_SEG

MOV AX,5

MOV MAX,AX

MOV AX,0FFFFH

MOV MIN,AX

CODE_SEG ENDS

12。(1)10025

(2)19

(3)2548

(4)3

(5)103

(6)0FFFFH

(7)1

(8)3

13。分别汇编成为:

MOV AX,0AH

MOV BL,0AH

MOV CL,1

14。(1)(AX)=1 (2)(AX)=2 (3)(CX)=14H (4)(DX)=32H (5)(CX)=1] 15。(1)操作符错误改为: DATA_SEG SEGMENT

(2)缺少段名在前面加个段名

(3)引用应该从;开始把那个“/”改成“;”

(4)结构混乱改为:

MAIN_PROC PROC FAR

。。。。

MAIN_PROC ENDP

END

16。程序框架如下:

DATA_SEG SEGMENT ;定義數據段

ORG 0E000H ;讓下一字節地址為0E000H

FIRST_TYPE EQU THIS WORD ;建立一個與下一存儲單元有相同段地址和偏移地址的操作數

DATA_GROUP DB 100 DUP(?) ;給DATA_GROUP 分配100個字節的空間

DATA_SEG ENDS ;數據段結束

STACK_SEG SEGMENT ;定義堆棧段

ALIGN 16 ;讓下一字節從小段首地址開始

STACK DB 100 DUP (?) ;為堆棧分配空間

STACK_SEG ENDS ;

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG ,DS:DATA_SEG ,SS:STACK_SEG

ORG 1000H ;讓下條指令的第一個字節從1000H開始

START : MOV AX,DATA_SEG

MOV DS,AX

MOV AX,STACK_SEG

MOV SS,AX

.......

CODE_SEG ENDS

END START ;結束~

17。程序如下:

D_SEG SEGMENT ;数据段定义

AUGEND DD 99251

D_SEG ENDS

E_SEG SEGMENT ;附加段定义ADDEND DD -15926

E_SEG ENDS

C_SEG SEGMENT ;代码段定义ASSUME CS:C_SEG , DS:D_SEG,ES:E_SEG

START: MOV AX,D_SEG

第五章答案

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

.model small

.stack 100H

.code

main proc far

Start:

push dx

mov ax,0

push ax

mov ah,01H

int 21H

cmp al,61H

jl lop1

cmp al,7BH

jge lop1

sub al,20H

mov dl,al

lop1:mov ah,2

int 21H

ret

End start

5.2 编写一个程序,从键盘接受一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符.

.model small

.386

.code

MAIN PROC FAR

start:

push ds

sub ax,ax

push ax

input:

mov ah,7H

int 21H

cmpe: cmp al,20H

JE exit

cmp al,61H

JL input

cmp al,7AH

JG input

print:

sub al,01H

mov dl,al

mov ah,02H

int 21H

add al,01H

mov dl,al

mov ah,02H

int 21H

add al,01H

mov dl,al

mov ah,02H

int 21H

;输出换行回车

mov dl,0AH

mov ah,02H

int 21H

jmp input

exit :

ret

MAIN ENDP

END start

5.3 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL、DL中。.model small

.data

x DB 4 dup(?)

.stack 100H

.code

MAIN PROC FAR

start:

push ds

and ax,00H

push ax

mov ax,1234H

mov cx,04H

mov si,00H

lop:

push cx

mov cl,04H

rol ax,cl

push ax

and al,0FH

mov BYTE PTR x[si],al pop ax

pop cx

add si,2

Loop lop

mov al,[X]

mov bl,[X+2]

mov cl,[X+4]

mov dl,[X+6]

print:

mov ah,02H

int 21H

mov dl,al

mov ah,02H

int 21H

mov dl,bl

mov ah,02H

int 21H

mov dl,cl

mov ah,02H

int 21H

exit:

ret

MAIN ENDP

END start

5.4 编写一个程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示"MATCH",若不同在显示:"NO MATCH"。

.model small

.data

STRING1 DB 'I must study hard'

STRING2 DB 'I must study hard'

X DB 'MATCH .$'

Y DB 'NO MATCH.$'

.stack 100H

.code

main proc far

Start:

push dx

mov ax,0

push ax

mov ax,@data

mov ds,ax

mov es,ax

lea si,STRING1

lea di,STRING2

cld

mov cx,(string2-string1)/ type STRING2

ret

End start

5.5编写一个程序,要求能从键盘接收一个个位数N,然后响铃N次,(响铃的ASCII为07)。这题比较有意思,呵呵。

model small

main proc far

start:

push ds

sub ax,ax

push ax

input:

mov ah,01H

int 21H

cmp al,20H

je exit

cmp al,30H

jle input

cmp al,3AH

jge input

sub al,30H

mov cx,ax

and cx,0FFH

lop: mov dl,07H

mov ah,2H

int 21H

loop lop

jmp input

exit : ret

main endp

end start

5.6编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组和负数数组N,并分别把这两个数组中的数据个数显示出来。

.model small

.386

.data

M DB 1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10

P DB 20 dup(?)

N DB 20 dup(?)

MAIN PROC FAR

start:

PUSH ds

AND ax,0

PUSH ax

MOV ax,@data

mov ds,ax

MOV bx,0

MOV si,0

MOV di,0

MOV cx,20D

cmpe : CMP M[bx],0

JL ifLow

hight : MOV al,byte ptr M[bx]

MOV byte ptr P[si],al

inc si

JMP commonContrl

ifLow :

MOV al,byte ptr M[bx]

MOV byte ptr N[di],al

INC di

commonContrl:

INC bx

loop cmpe

mov ax,si

call showNumber

call printCR

mov ax,di

call showNumber

exit: ret

MAIN ENDP

;;;;;;;;;;;;;;;;;注意,ShowNumber这个子过程有问题,请自行修改;;;;;;;;;;;;;;;; showNumber PROC NEAR

汇编语言程序设计练习题

汇编语言程序设计练习题 一、字符与串处理类 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进制

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

汇编语言程序设计练习题及答案

一、单项选择题(在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。) 1.为在一连续的存储单元中,依次存放数据41H,42H,43H,44H,45H,46H,可选用的数据定义语句是(D) A.DB 41,42,43,44,45,46 B.DW 4142H,4344H,4546H C.DW ‘AB’,‘CD’,‘EF’D.DW ‘BA’,‘DC’,‘FE’ 2.DA2 DB‘AB’,‘CD’ ┇ MOV AX,WORD PTR DA2+1 上述语句执行后AX中的值是(D) A.‘AD’B.‘BC’ C.‘DA’D.‘CB’ 3.下列数据定义语句中可实现留空20H个字节存储单元的是(D) A.DB 20 DUP(?) B.DW 20H DUP(?) C.DB 10H DUP(4 DUP(?)) D.DD 08H DUP(?) 4.如某存储器分段时,表示偏移地址是17位二进制代码,那么一个段最多的存储单元数是(D) A.32K字节B.32K字 C.64K字节D.64K字 5.下列寄存器中用来指示堆栈中任意数据区的偏移地址的是(B)A.BX B.BP C.SI D.DI 6.下列指令中有语法错误的是(C) A.PUSH AX B.PUSH [20H+SI+BX] C.POP CS D.PUSH CS 7.执行PUSH BP指令时,目的操作数的物理地址表达式是(D) A.16*SS+BP B.16*DS+BP C.16*CS+IP D.16*SS+SP 8.把BL中的数据输出到端口8CH中正确指令是(C) A.OUT 8CH,BL B.IN 8CH,BL C.MOV AL,BL D.MOV AL,BL OUT 8CH,AL IN 8CH,AL 9.结果为零的条件转移指令,其测试条件是(A) A.ZF=1 B.ZF=0 C.SF=l D.SF=0 10.下面程序段完成测试DA-BYTE字节单元中数是否为负数,若是则将全l送DH中,否则全0送DH中,那么程序段中方框里应填的语句是 MOV CH,0 MOV CH,0FFH ZERO:MOV DH,CH(C) A.JNZ ZERO B.JS ZERO

汇编语言学习知识程序设计实验

目录 目录 (1) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

汇编语言程序设计期末考试题

汇编语言程序设计期末考试题 学院(系):学号: 姓名: 计分: 一、项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号 内。每小题1分,共10分) 1.CPU发出的访问存储器的地址是( ) A.物理地址 B.偏移地址C.逻辑地址D.段地址 2.将高级语言的程序翻译成机器码程序的实用程序是( ) A.编译程序 B.汇编程序 C.解释程序 D.目标程序 3.DEC BYTE PTR[BX]指令中的操作数的数据类型是( ) A.字 B.双字C.字节D.四字 4.在下列语句中,BUFFER称为( ) BUFFER DB 01H,0AH A.符号 B.变量 C.助记符D.标号 5.串操作指令中,源串操作数的段地址一定在( )寄存器中。 A. CS B. SS C. DS D. ES 6.使计算机执行某种操作的命令是( ) A.伪指令B.指令 C.标号D.助记符 7.将数据5618H存放在存储单元中的伪指令是( ) A. DATA1 DW 1856H B. DATA1 DB 18H,56H C. DATA1EQU 5618H D. DATA1 DB 18H,00H,56H,00H 8.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=( ) A.1400H B. 77F8H C. 0000H D. 0FFFFH 9.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍 采用的是( )码。 A. BCD码 B.二进制码 C.ASCII码D.十六进制码 10.用指令的助记符、符号地址、标号和伪指令、宏指令以及规定的格式书写程序的语 言称为( ) A.汇编语言 B.高级语言 C.机器语言 D.低级语言 二、填空题(每空1分,共20分) 1.在8086/8088汇编语言中,有五条串操作指令,其中搜索字符串指令的助记符是______。 2.通常所说的计算机系统包括________和________两大部分。 3.8086/8088存储器分四个段,这四个段的段名所对应的段寄存器分别是________、_____ ___、________、________。 4.现有AX=2000H,BX=1200H, DS=3000H, DI=0002H, (31200H)=50H,(31201H)=02H, (31202H)=40H,请写出下列各条指令独立执行完后有关寄存器及存储单元的内容,并指出标 志位ZF、CF的值。 A.ADDAX,1200H;问AX=________H,ZF=________

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

汇编语言程序设计试题

汇编语言程序设计试题 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.设SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( A ) A.20640H B.2063EH C.2063FH D.21900H 2.使用DOS功能调用时,子程序编号应放在( B ) A.AL B.AH C.AX D.任意指定 3.没有 ..语法错误的输出指令是( B ) P76 A.OUT AX,30H B.OUT DX,AL C.OUT AL,DX D.OUT 30H,AH 4.用MOV指令将十进制数89以非压缩BCD码格式送入AX,可使用的指令是( B ) A.MOV AX,89 B.MOV AX,0809H C.MOV AX,89H D.MOV AX,0809 5.设AX=8765H,DX=4321H,执行CWD指令后,DX中的内容是( B ) P117 A.4321H B.0FFFFH C.8000H D.0001H 6.设CL=05H,要获得CL=0AH,可选用的指令是( A) A.XOR CL,0FH B.NOT CL C.OR CL,0AH D.AND CL,0FH 7.假设执行ADD指令后AL=8CH,再执行DAA指令,AL中的值是( A ) A.92H B.0104H C.74H D.8CH 8.MOV AL,79H ADD AL,B1H 上面指令执行后,设置的标志位CF和ZF的值是( D ) A.CF=0,ZF=1 B.CF=l,ZF=1 C.CF=0,ZF=0 D.CF=1,ZF=0 9.TEST DL,55H P123 JZ NEXT NEXT:…… … 上述程序段,执行JZ指令时能产生转移的情况是( D ) A.DL>55H B.DL<55H C.DL=55H D.DL中第0、2、4、6位均为0 10.假设AL=28H, 执行ROL AL,1 指令之后的情况是( D ) P125 A.AL=14H, CF=1 B.AL=50H, CF=1 C.AL=14H, CF=0 D.AL=50H, CF=0 11. 98的BCD码是(B) A)10011001 B) 10011000 C) 10011010 D) 10001010 12. –0110110 的补码是(A) A) 11001010 B) 11001001 C) 10110110 D) 00110110

汇编语言程序设计实验篇emu

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。 1.1.1创建程序 https://www.doczj.com/doc/0519133341.html, TEMPLATE程序 本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。 在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。 输入全部指令后,单击按钮,保存相应的程序段。 2.EXE TEMPLATE程序 本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。 在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

汇编语言程序设计试题

汇编语言程序设计试题 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题2分,共50分) 1.CPU发出的访问存储器的地址是( A ) A.物理地址 B.偏移地址 C.逻辑地址 D.段地址 2.使计算机执行某种操作的命令是( B ) A.伪指令 B.指令 C.标号 D.助记符 3.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=(A) A. 1400H B. 77F8H C. 0000H D. 0FFFFH 4.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍采用的是( C)码。 A. BCD码 B.二进制码 C.ASCII码 D.十六进制码 5.下列关于8086CPU的工作原理的描述错误的是__C___。 A.汇编程序员可以通过对各种寄存器中内容的修改实现对CPU的控制。B.CPU在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址。 C.任意时刻,CS:IP指向的内容即是此刻CPU正在执行的指令。 D.传送指令能够更改所有通用寄存器的内容。 6.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是(C) A.12CFBH B.12B6BH C.12C5BH D.12BFEH 7. 16位结构的CPU 不一定具备的特性是(D)。 A. 运算器一次最多可以处理16位的数据 B. 寄存器的最大宽度为16位 C. 寄存器和运算器之间的通路为16位 D. 地址总线为16根 8. 下列指令的书写正确的是(C)。 A. push al B. mov cs:[0],ds:[10] C. pop si D. mov ds:[0],2 9.在DEBUG工具中,显示寄存器内容的命令是( D )。 A. G B. D C. T D. R 10. 能够将ax中的内容送到内存0000:0200H处的指令序列是(D)。

汇编语言程序设计题库

汇编语言程序设计题库 一.选择题(100选20个每个1,共20分) 1. 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 A. 10 B.11 C.12 D.13 2.在存储器中,数据和程序以形式存放。 A.二进制 B.十进制 C.八进制 D.十六进制 3.CPU要访问的某一存储单元的实际地址称 A.段地址 B.偏移地址 C.物理地址 D.逻辑地址 4.某存储单元的物理地址是12345H,可以作为它的段地址的有 A.2345H B.12345H C.12340H D.1234H 5.设物理地址(21000H)=20H ,(21001H)=30H,(21002H)=40H。如果从地址21001H 中取出一个字的内容是 A. 2030H B.3040H C.3020H D.4030H 6.在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址为() A. 3017BH B. 30170H C. 3017AH D. 30210H 7.在DEBUG工具中,单步执行指令的命令是()。 A. G B. D C. T D. R 8. 在DEBUG工具中,显示寄存器内容的命令是()。 A. G B. D C. T D. R 9.若栈顶的物理地址为20100H,当执行完指令PUSH AX后,栈顶的物理地址为()。 A. 20098H B. 20102H C. 200FEH D. 20100H 10.若栈顶的物理地址为20100H,当执行完指令POP AX后,栈顶的物理地址为()。 A. 20098H B. 20102H C. 200FEH D. 20100H 11.如代数据段名为DATA_SEG,它的起始地址为20A00H,对数据段寄存器DS赋值段地址值的方法是()。 A. MOV DS,20A0H B. ASSUME DS:DATA_SEG C. DATA_SEG SEGMENT D. MOV AX,DATA_SEG MOV DS,AX 12.执行PUSH BP指令时,源的操作数的物理地址表达式是() A.16*SS+BP B.16*DS+BP C.16*CS+IP D.16*SS+SP 13.用户为了解决自己的问题,用汇编语言所编写的程序,称为() A目标程序B源程序C可执行程序D汇编程序 14.已知AX=8065H,BX=103AH,则指令ADD BL,AL执行后,OF和CF的值分别为()。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 15. 当CX=0时,REP MOVSB执行的次数为。( ) A. 1次 B. 0次 C. 25535次 D. 25536次 16.条件转移指令JB产生程序转移的条件是() A.CF=1 B.CF=0 C.CF=1和ZF=1 D.CF=1和ZF=0 17.设AL=20H,SI=0500H,DS=3000H,(30500H)=0C0H,CF=1。执行SBB AL,[SI]后,正确的结果是() A.AL=5FH SF=1 CF=1 B.AL=60H SF=1 CF=0

《汇编语言程序设计》期末复习题答案_57431457509182192

《汇编语言程序设计》复习题(答案指导/带页号)一、选择(30题) 1.下列是8位带符号二进制数的补码,其中最大的是( B )。参见P22 A、10001000 B、00000001 C、00000000 D、11111111 2.在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现 ( C )参见P157、158 A、占内存空间小,但速度慢 B、占内存空间相同,速度快 C、占内存空间大,但速度快 D、占内存空间相同,速度慢 3.数据定义为:EE DB 3,4 CC DW 3456H,6789H 执行指令“MOV CX,WORD PTR EE+1”后,(CX)= ( B )参见P27、63、64 A、0304H B、5604H C、3404H D、3456H 4.有如下指令序列: MOV AL,95H MOV CL,2 SAR AL,CL 上述指令序列执行后,AL的内容是( D )参见P95 A、05H B、25H C、24H D、0E5H 5.设A=18610,B=2738,C=0BB16,把这三个数看成无符号数,则它们之间的关系是( D )参见P23、15 A、A>B>C B、 A

汇编语言练习题库

华中师范大学网络教育学院 《汇编语言程序设计》练习测试题库一 .选择题(只有一个正确答案,填在题干前的括号里) 1.一台完整的计算机系统包括_________。 A.硬件系统和软件系统 B.系统硬件和系统软件 C.控制器、运算器、存储器、输入设备和输出设备 D.操作系统、机器语言、汇编语言、高级语言 2.汇编程序属于_________。 A.硬件系统 B.软件系统 C.系统软件 D.用户软件 3.简单的汇编语言程序可以通过_________来建立 A.连接程序 B.调试程序 C.汇编程序 D.编辑程序 4.8086/8088微处理器包含有两个独立的部件_________和_________。 A.R和ALU B.CS和IP C.BIU和EU D.CPU和I/0设备

5 .进行汇编语言编程时,设计者应该考虑一些基本的要求,下列叙述不正确的是____。 A.程序应该结构化 B.程序应该执行速度快 C.程序应该占用空间大 D.程序应该简明、易读、易懂 6 .一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是____。 A.12C5BH C.12C59H 7 .字符串HOLLO的ASCII代码表示为____. A.484F4C4C4FH B.484F4D4D4FH C.494F4C4C4FH D.494F4D4D4FH 8.如果内存中某一单元的物理地址是20B4CH,那么它的逻辑地址是_________:212CH。 A. IEA2H B. IEB2H C. IFA2H D. IFB2H 9,现有段地址和偏移地址为1025H:0F2AH,那么它所对应存储单元中的物理地址是 _________。 A. 1107AH B. 01F4FH C. 11F4FH D. 1117AH 10.一个有16个字的数据区,它的起始地址是1000H:117AH,请指出这个数据区最末一个字单元的物理地址是_________。 C .11198H

汇编语言程序设计

《汇编语言程序设计》课程教学大纲 学时:32 学分:2 理论学时:24 实验学时:8 面向专业:电科、电信、通信课程代码:B2700009 先开课程:C语言程序设计课程性质:必修 执笔人:王艳春审定人:陈龙猛、张金政 第一部分:理论教学部分 一、说明 1、课程的性质、地位和任务 本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。 2、课程教学和教改基本要求 课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。学习这门课程,应达到以下几个要求: ①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧; ②具有阅读,分析汇编语言程序的能力; ③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行 过程及debug工具的调试手段。

汇编语言程序设计实验内容(川大微机原理实验资料和内容以及MASM使用方法)

第一部分汇编语言程序设计 实验一熟悉、使用DEBUG调试工具 一.上机目的: 1.了解并逐步熟悉汇编语言的编辑方法及特点. 2.复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。 3.掌握汇编语言的编辑、汇编及连接的过程。 4.了解并逐步掌握运用DEBUG进行调试汇编语言程序。 二.实验内容: 1.运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 2.运用MASM﹒EXE文件进行汇编,修改发现的各种语法错误,直至正确,形成*.OBJ 文件。 3.运用LINK.EXE文件进行连接,形成*.EXE文件。 4.仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。 5.运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 6.再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG 的设置断点,单步执行等功能发现错误所在并加以改正。 程序清单: 多字节非压缩型BCD数除法(88754/6=14792) DA TA SEGMENT A D B 8,8,7,5,4 B DB 6 C DB 5DUP (0) N EQU 5 DA TA ENDS CODE SEGMENT ASSUME CS:CODE;DS:DATA;ES:DATA, START MOV AX,DA TA MOV DS,AX MOV ES,AX CLD LEA SI,A LEB DI,C MOV CX,N MOV AH,0 LP1:LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C

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

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用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

汇编语言程序设计试题和答案

《汇编语言程序设计》试题 专业姓名成绩 一、单项选择题(每1分,共15分). 1将下列二进制数0111,1111,1111 转换为16进制数和10进制数是() A.07FFH 3021D B. 6FEH 1021D C. 07FFH 2012D D. 07FFH 2047D 2. 在1BM Pc机的IN和OUT 指令中,I/o端口号通常是由Dx寄存器来提供的,但有时也可以在 指令中用一个字节来表示端口号。试问可以直接由指令指定的I/o端口号有多少个?( ) A. 127D B.255D C. 256D D.128D 3. 设MYDAT是一个字变量,下列指令中,错误的是() A.MOV BX,10100B B.MOV DS,AX C.ADD BX,[10100H] D.MOV BX,MYDAT[SI] 4.设有关寄存器及存储单元的内容如下:(DS)=2000H,(BX)=0100H,(SI)=0002H, (20100)=12H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(20202)=0B7H,(21203)=65H,试指出:MOV AX,1100h[BX]指令执行后,AX寄存器内是() A.5678H B.4C2AH C.2A4CH D.7856H 5.一台微型计算机的字长为16位,如果采用字节编址,那么它可以访问的最大存储空间是多少字节 ( ),试用16进制数表示该机的地址范围() A.1M 0~FFFFFH B.64K 0~FFFFH C.128K 0~FFFFH D.128K –FFH~FFH 6. 如果在一个程序段开始执行之前,(cs)=0A7F0H,(1P)=2B40H,试问该程序段的第一个字的物 理地址是() A.BAA40H B.AAB40H C.AAA40H D.0D603H 7.下列指令哪个是错误的(设OP1,OP2 是已经用DB定义的变量名)( ) A.CMP BL,OP1 B.MOV [BX],111001B C. INC OP2 D.SAR AX,CL 8.假定(DX)=10111001B,(CL)=05,(CF)=1试确定:RCL DL,CL 指令执行后, DX中的值是() A.00CEH B.009DH C.00B9H D.003BH 9. 有符号定义语句如下: BUFF DB 1,2,3,‘123’ EBUFF DB 0 L EQU EBUFF - BUFF 问L的值为多少( ) A.6D B.7D C.3D D.5D. 10. IBMPC机中下列那些寄存器可以用来存储存储器地址() A、BX,BP,SP,CX B、AX,SI,DI,DX C、BX,SI,DI,SP D、DX,SI,DI,SP 11.下列指令中正确的是() A.MOV [BX],[SI] B.MOV AX,[SI][DI] C.MOV BX,OFFSET NAME[SI] D.MOV BYTE PTR [100],100 12下列程序段执行后,寄存器BX中的内容是什么()

8086汇编语言程序设计实验指导书.

汇编语言上机实验指导书 一、概述 上机实验总学时为16学时,其中综合性实验为2学时。实验共有6项暂定为8次,每次2学时。 1.实验辅导的主要内容 实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。 2.实验的软硬件要求 关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。 3.加强实践能力的培养 实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。其中包括: 实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等; 开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。 对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。 实验一汇编语言运行环境及方法、简单程序设计(2学时、验证性) 1.实验目的: (1) 熟悉汇编语言运行环境和方法 (2)了解如何使用汇编语言编制程序 (3) 熟悉DEBUG有关命令的使用方法 (4) 利用DEBUG掌握有关指令的功能 (5) 利用DEBUG运行简单的程序段 2.实验内容 (1)学会输入、编辑汇编语言程序 (2)学会对汇编语言程序进行汇编、连接和运行 (3)进入和退出DEBUG程序 (4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。 3.实验准备 (1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。 (2)准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。 (3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’;(1)仔细阅读有关DEBUG 命令的内容,对有关命令,都要事先准备好使用的例子。 4.实验步骤 (1)在DOS提示符下,进入MASM目录。 (2)在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。 ①调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm ②用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc 不断修改错误,直至汇编通过为止。 ③用连接程序link产生执行文件exe.例:link abc ④执行程序 可直接从DOS执行程序,即在DOS环境中,输入文件名即可。 (3)详细记录每一步所用的命令,以及查看结果的方法和具体结果。 5.实验报告要求 (1)源程序清单。 (2) 如何启动和退出EDIT程序。 (3) 如何对源程序进行汇编及编辑。

相关主题
文本预览
相关文档 最新文档