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

求答案:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。,第1张

NAME TURN

DSEG SEGMENT

A DB 'PLEASE INPUT (a~z):','$'

B DB 0AH,0DH,'$'

DSEG ENDS

SSEG SEGMENT STACK

DB 90H DUP()

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,SS:SSEG

START:

MOV AX,DSEG

MOV DS,AX

MOV DX,OFFSET A///提示输入

MOV AH,09H

INT 21H

MOV AH,01H

INT 21H

MOV BL,AL

SUB BL,20H///转换

MOV DX,OFFSET B

MOV AH,09H

INT 21H

MOV DL,BL

MOV AH,02

INT 21H//输出

MOV AH,4CH

INT 21H/////结束

CSEG ENDS

END START

我给你推荐两本书吧

1<Windows环境下32位汇编语言程序设计(第二版)>,罗云彬著,电子工业出版社出版

2<加密与解密实战入门>,郑羽等人编著,电子工业出版社出版

说明如下:

1汇编语言是破解的基础,而学习汇编语言,首选Win32汇编!为什么请你阅读我推荐的第一本书,就知道了!这本书提供了从入门到提高的学习过程,精通此书,足矣!

2第二本书介绍了关于破解的种种手段和工具!是初学破解者之首选!

另:

请到"看雪论坛"注册一个帐号,常去看看,那有很多查壳,去壳,加壳,加花,去花等等工具!!!

1王爽的"汇编语言第二版"这本书最好作为入门书籍去读,

通俗易懂,容易入门,方便掌握很多汇编语言的基础知识

2INTEL汇编语言程序设计第五版,Kip RIrvine著,温玉杰等译。这本书很经典。。。适合读过王爽的书以后再来读,可以加深对汇编语言的理解,接触WINDOWS下的32位汇编,并且介绍了汇编语言的高级语言接口等比较实用的知识。

3琢石成器-WINDOWS环境下32位汇编语言程序设计,罗云彬

如果对WINDOWS环境下的汇编感兴趣,那么可以看这本书,同样是经典之作,买之前也可以去网上翻书评,心里也有个数

第一章

11

CPU 分析、控制并执行指令的部件

IP 指示下一条将要执行的指令的地址

SP 保存当前栈顶地址的寄存器

状态标志 指出指令 *** 作结果的标志,如ZF,CF等。

控制标志 控制 *** 作的标志,只有DF,IF,TF三个。

ALU 进行算术和逻辑运算的单元

存储器 存储程序、数据等信息的的记忆装置。

物理地址 CPU发出的访问存储器的地址信息。

偏移地址 相对于段起始地址的偏移量。

段地址 是逻辑段的起始地址。

12下列 *** 作可使用哪些寄存器

·存放各种运算 *** 作的数据:AX,BX,CX,DX,SP,BP,SI,DI

(我的辅导书上没有SP,BP;why)

·存放数据串 *** 作时的计数值:CX

·查看程序已执行到哪条指令的地址:IP

·查看堆栈中当前正要进行入出栈的存储单元的地址:SP

·查年运算结果是否等于零:PSW的ZF

·查年程序中的数据存放段区是从哪个地址开始的:DS,ES

·查看程序中的指令存放的段区是从哪个地址开始的:CS

13段地址和偏移地址为1000:117A的存储单元的物理地址是什么而1109:00EA或1025:0F2A的存储单元的物理地址又是什么:这说明了什么问题

1000:117A物理地址为:1117A;1109:00EA的物理地址为:1117A;1025:0F2A的物理地址为:1117A说明物理地址不变,段地址改变,偏移地址也随之变化

1存储器地址对应的数据(图略)

75422H(字节):9CH

75424H(字节):5DH

75422H(字):249CH

75424H(字):E65DH

第二章

21写出相应的汇编语言指令:

(1)以寄存器BX和SI作为基址变址寻址方式把存储器中的一个字传送到CX寄存器。

MOV CX,[BX][SI(注:寄存器寻址只能使用:BX,BP,SI,DI;且BX、BP或SI,DI不能同时使用,可能我说的不太对,请版主确认一下)

(2)以寄存器BX和偏移量value作寄存器相对寻址方式把存储器的一个字和AX相加,把结果(即和)送回那个字单元中。

ADD value[BX],AX

(3)将一个字节立即数0B6H与符号的地址为NUM的存储器字节单元内容相比较。

CMP BYTE PTR 0B6H,NUM(如果前面不加BYTE RTR,默认的也是字节比较吧?还有双字比较,应该怎么写?)

(4)测试从寄存器BP和DI、偏移量COUNT作为相对基址变址寻址方式寻址的存储器字节单元内容最高位B7的值,字节单元的内容不能改变。

TEST COUNT[BP][DI],80H

(5)将AH寄存中的高4位和低4位数据互换。

MOV CL,4

ROL(或ROR) AH,CL

(6)清除以寄存器SI间接寻址的存储器字单元,同时清除CF标志位

XOR AX,AX ;使AX=00000000,CF=0

MOV [SI],AX

22设DS=1000H,BX=2865H,SI=0120H,偏移量D=47A8H,试计算下列各种寻址方式下的有效地址

1)使用D的直接寻址 47A8H (这道指令怎么写如何定义D的值)

2)使用BX的寄存器间接寻址 2865H

3)使用BX和D的寄存器相对寻址 700DH

4)使用BX、SI和F的相对基址变址寻址 712DH

5)使用BX、SI的基址变址寻址 2985

23假设DS=1000H,BX=2A80H,CX=3142H,SI=0050H,(10050H)=3BH,(10051H)=86H,(11200H)=7AH,(11101H)=64H,(12ADOH)=0A3H,每小题的括号中分别填入指令执行后的结果:

1)MOV AX,1200H ;AX=1200H

2)MOV AX,[1200H] ;AX=1200H(书上的答案是647A,但是我用DEBUG试了一下是1200,可能是因为我的PII的原因吧,希望有8088的朋友能试一下,版主,考起试来应该怎么写呀)

3)ADD [SI],CX ;(10050H)=7DH,9100510=B7H,ZF=0,CF=0,SF=1,OF=1

4)OR BYTE PTR [BX][SI],54 ;(12AD0H)=F7,CF=0,OF=0

5)MOV 150H[BX],CH ;[12BD0H]=31,CH=31

24指出下列指令的错误原因

1)MOV AX,CL 两 *** 作数的长度不一样

2)MOV CS,AX 不能给CS赋值

3)INC BETA[BP] 书上说:没有数据类型说明,但我认为它应该自动默认为字节 *** 作,版主再来看看吧

4)MOV ES,1850H 立即数不能直接送段寄存器

5)ADD BX,DS 段寄存器不能做为加法 *** 作数使用

6)AND AX,[CX] 寄存器寻址只能使用BX,SI,DI,BP

25说明下列指令执行的 *** 作,说明原始数据和结果数据的存储地点

贴子相关:

作者: 2182773 2005-9-3 09:21 回复此发言

--------------------------------------------------------------------------------

2 汇编语言程序设计课后习题答案

[原始数据](结果数据)

1)mov [2700h],cx 这条指令在我的P4试了一下,是错误的;如果考试时出只好说是:把[CX]中的内容送到(数据段中偏移地址为2700h字单元)中;

2)MOV DH,50[SI] 将[数据段中有效地址为SI+50的字节单元]中的数据送入(DH)中;

3)LEA SI,ARRAY 将ARRAY的偏移地址送入(SI),结果数据在[代码段对相应指令字节中]

4)DAS 将AL中的压缩的十六进制数调整为十进制数,结果数据在AL中,原始数据也在AL中

5)ADC CL,[BX] 将BX和CL的和加上CF的值后,存放在CL中,结果在CL中,原始在BX,CL,CF中

6)ROR WORD PTR ALPHA[SI],CL 将偏移地址为ALPHA+SI字单元中的数据循环移,结果和原始都在哪个字单元中

26指出下列无条件转移指令的转移地址中的偏移地址是什么,存放在何处

1)JMP BX 偏移地址是BX中的值,存放在BX中

2)JMP WORD PTR [BX] 偏移地址是以BX中的值为偏移地址的一个字单元中的数值,存放在以BX中的值为偏移地址的一个字单元中

3)JMP NEAR PTR PROA 偏移地址为PROA的偏移地址,存放在CS段的相应指令处(书上说的不一样,请版主做下这道题)

4)JMP FAR PTR FAR_PRO 偏移地址为FAR_PRO的偏移地址,,存放在CS段的相应指令处

5)JMP SHORT AGAIN 偏移地址为AGAIN的偏移地址,存放在CS段的相应指令处(书上说的不一样,请版主做下这道题)

6)JMP DWORD PTR [BX][DI] 偏移地址是以BX,DI为基址变址寻址的两个字单元的内容,存放在以BX,DI为基址变址寻址的两个字单元中

27写出把道址为BLOCK的字数组的第六个字送到CX寄器的指令序列,要发别使用以下几种寻址方式

1)以BX寄存器的间接寻址

LEA BX,BLOCK+0AH

MOV CX,[BX]

2) 以BX寄存器的相对寻址

LEA BX,BLOCK

MOV CX,0AH[BX]

3) 以BX,SI的基址变址寻址

LEA BX,BLOCK

MOV CX,[BX][SI]

28指出下列指令的源和目的 *** 作数的寻址方式

(目地 *** 作数寻址方式;原 *** 作数寻址方式)

1)MOV ARRAY,BX

直接寻址;寄存器寻址

2)ADC CX,ALPHA[BX][SI]

寄存器寻址;相对基址变址寻址,寄存器寻址

3)AND BYTE PTR GAMMA [DI],11011001B

寄存器相对寻址;立即寻址,寄存器相对寻址

4)INC WORD PTR [BX]

寄存器间接寻址;寄存器间接寻址

5)TEST EX:[IS],DX

(目的 *** 作数在哪只改变标志位,算寄存器寻址吗书上写的寄存器间接寻址,不明白);寄存器间接寻址,寄存器寻址

6)SBB SI,[SI]

寄存器寻址;寄存器寻址,寄存器间接寻址

29分别说明下列每组指令中的两条指令的区别:

1) MOV AX,TABLE

LEA AX,TABLE

前者是将变量TABLE的内容传递给AX;后者是将TABLE和偏移地址传递给AX

2) AND BL,0FH

OR BL,0FH

前者是BL的内容与0F相与;后者是BL与0FH相或

3) JMP SHORT L1

JMP NEAR PTR L1

前者为短跳转,后者为近跳转

4) MOV AX,[BX]

第三章

31

1)使计算机执行某种 *** 作的命令 ;指令

2)表示计算机执行什么 *** 作的符号 ;助记符

3)存放指令机器码的存储器段区 ;代码段

4)指出指令在程序中位置的符号地址 ;标号

5)将汇编语言程序翻译成机器码程序的实用程序 ;汇编程序

32试写出完成下列 *** 作的指示性语句:

1)将56H,78,0B3H,100存放在定义为字节变量ARRAY的存储单元中

ARRAY DB 56H,78,0B3H,100

2)将字数据2965H,45H,2965,0A6H存放在定义为字节变量DATA的存储单元中

ARRAY DB 65H,29H,45H,95H,0BH,0A6H ;书上在0B和0A6H后面有个0,不什么是什么

3)将字节数据56H,0C6H,78H,12H存放在字变量ALPHA的存储单元中并且不改变数据按字节存储的次序

ALPHA DW 0C656H,1278H

4)在BETA为道址的存储单元中连续存放字节数据:2个23,5个'A',10个(1,2),20个空单元。

BETA DB 2 DUP (23),5 DUP ('A'),10 DUP (1,2), 20 DUP ()

5)在STRING为首址的存储单元中存放字符串'THIS IS A EXAMPE'

STRING DB 'THIS IS A EXAMPE'

33下列伪指令序列中,BASUB的值为多少它表示什么意义

作者: 2182773 2005-9-3 09:21 回复此发言

--------------------------------------------------------------------------------

3 汇编语言程序设计课后习题答案

BUFF DB 7,6,'56',

ARRAY DW 0,67H,7

BASUB EQU ARRAY-BUFF

BASUB的值是5,它表示ARRAY与BUFF的首地址的差

34假设程序中的数据定义如下:

BUF1 DB 100 DUP ('a')

BUF2 DW 1275H,567,0C5H

BUF3 DB 20 DUP ()

BUF4 DB 7,4,6,9,8

1)用一条指令将BUF1的谝移地址送入BX

LEA BX,BUF1

2)将BUF2的第三字节数据送入CL

MOV BYTE PTR CL,[BUF2+2]

3)将0A6H送入BUF3的第10个字节单元中

MOV BYTE PTR [BUF3+9],0A6H

4)用伪指令写出BUF1和BUF2二者的总长度(字节数)

L1_2 EQU BUF3-BUF1

5)用一组指令写出BUF2的第二个数据567和BUF4的第三个数据6相加,结果(和)送入BUF3

MOV AL,BUF4+2

MOV AH,0

ADD AX,BUF2+2

MOV BUF3,AX

35指出下列第一对伪指令语句的区别:

1)X1 DB 76; X2 EQU 76

前者是向X1的字节单元存入76,后者是将X2的值定义为76

2)X1 DW 3548H; X2 EQU BYTE PTR X1

前者是定义X1的字单元值为3548,后者是定义X2的值为X1的第一个字节单元的值48

3)X1 EQU 3; X2 = 3

两者都是赋值语句,但前者只能定义一次,后者可以重复定义

4)X1 DW 3678H; X2 DB 36H,78H

前者的字节单元内容依次为78,36;后者的字节单元内容依次为36,78

5)X1 DW 6341H; X2 DW 6341

前者为十六进制的6341;后者为十进制的6341

36设置一个数据段DATA_SEC,其中连续存放下列的8个变量,用段定义语句和数据定义语句写出数据段:

1)DATA1为字符串变量:'DATA SEGMENT'

2)DATA2为十进制数字节变量:72,65,-10

3)DATA3为十六进制数字字节变量:109,98,21,40

4)DATA4为10个零的字节变量

5)DATA5为数字的ASCII字符字节变量:12345

6)DATA6为十进制的字变量:7,9,298,1967

7)DATA7为十六进制的数的字变量:785,13475

8)DATA8为本段中字变量和字节变量之间的字节单元数之差

DATA_SEC SEGMENT

DATA1 DB 'DATA SEGMENT'

DATA2 DB 72,65,-10

DATA3 DB 6DH,62H,15H,28H

DATA4 DB 10 DUP (0)

DATA5 DB '12345'

DATA6 DW 7,9,298,1967

DATA7 DW 0311H,34A3H

D1 EQU DATA6-DATA1

D2 EQU $-DATA6

DATA8 EQU D2-D1

37设程序中的数据定义如下:

DATA1 DW

DATA2 DB 32 DUP ()

DATA3 DD

DLENGTH EQU $-DATA1

问DLENGTH的值为多少它表示什么意义

DLENGTH的值为38,表示DATA1,DATA2,DATA3所占用的字节数之和

38指出下列第一小题中的伪指令表达的 *** 作哪些是错误的错误在哪时

1)

ALPHA EQU 78H

BETA EQU ALPHA+1

没错

2)

DATA DB 395

1个字节最多能够表示256

3)

X1 SEG

X1 ENDS

SEG应该写成SEGMENT

4)

ALPHA EQU BETA

BETA没有赋值

5)

COUNT EQU 100

COUNT EQU 78

不可以用EQU给一个变量重复赋值

6)

MAIN PROC

ENDP

过程结束标志,应该有个MAIN

7)ARRAY DW 10 DUP ()

JMP ARRAY

ARRAY是变量,JMP不能跳到ARRAY处

8)

SEGMENT CODE_SEG

ENDS CODE_SEG

书写格式错误,应写为

CODE_SEG SEGMENT

CODE_SEG ENDS

39对于下面的数据定义,写出各条指令执行的结果:

FLDB DW 0A24FH

TABLE DB 32H,52,0C2H,213

TEA EQU WORD PTR TABLE

ARRAY DB 'ABCD'

COUNT EQU $-ARRAY

1)MOV AX,FLDB AL=(4FH)

2)MOV BX,TEA BH=(52H)

王爽书中的汇编语言,是16位实模式下的汇编语言。

罗云斌的书讲的是工作在32位环境下保护模式的汇编。

时至今日,传统的dos时代已经过去了。

很少应用程序还设计为工作在16位环境下。大部分都工作在32位环境下。

而16位和32位是两码事,16位中是调用各种中断完成功能,

但在32位保护模式中,这是非法指令,只能调用windwos系统提供的api而不能直接调用中断了。

32位环境的汇编的风格越来越接近c。

对于逆向而言,用16位的方法来反汇编32位,是不可行的。

同样,把32位程序反汇编结果以16位的方法来解也是不可行的。

在windows32下的逆向是必须掌握win32汇编。熟悉各种win32api,熟悉pe结构,熟悉脱壳,熟悉各种算法等等。

win32汇编只是学习逆向的基础,只会汇编不可能在逆向的路上走多远,还必须学习很多高级语言,和熟悉这些高级语言的反汇编形式和结构。

对于采用虚拟机的语言,则需要学习其虚拟机上运行的指令。

比如net逆向,就必须掌握IL

逆向很有趣,也很辛苦。希望lz坚持。

汇编语言教材很多,各种处理器都有涉及,粗略统计不下百种。在这么多的教材里,用得较多的可以分类列举如下: 1《x86汇编语言:从实模式到保护模式》,李忠著,电子工业出版社,2013-1 。

基于INTEL x86处理器、NASM编译器和BOCHS虚拟机。汇编语言就是处理器的语言,从这个意义上来说,既然学习汇编语言,就必须直接面向硬件编程,而不是使用莫名其妙的DOS中断和API调用。这是一本有趣的书,它没有把篇幅花在计算一些枯燥的数学题上。相反,它教你如何直接控制硬件,在不借助于BIOS、DOS、Windows、Linux或者任何其他软件支持的情况下来显示字符、读取硬盘数据、控制其他硬件等。

我们知道,32位和64位是主流,实模式和DOS *** 作系统已经成为历史,Linux和Windows都工作在保护模式下。这本书从实模式讲到32位保护模式,尤其以32位保护模式为重点,阅读本书,对理解现代计算机和现代 *** 作系统的工作原理有非常大的帮助作用。

2《汇编语言》(第2版),王爽 著,清华大学出版社,2013-4-1

基于INTEL 8086处理器、MASM编译器,以及DOS平台的汇编教材,完全以8086处理器的实模式为主,不涉及常用的32位和64位模式,但因为通俗易懂,读者反映很好。

3《80X86汇编语言程序设计教程》,杨季文等 编著,清华大学出版社,1999-3-1

基于INTEL x86处理器、MASM和TASM编译器,包含16位实模式和32位保护模式的内容,而且对后者讲述较为详细。

4《32位汇编语言程序设计》,钱晓捷 编著,机械工业出版社,2011-8-1

基于INTEL x86处理器、MASM编译器,以及WINDOWS平台的汇编教材。

5《16/32位微机原理汇编语言及接口技术》,钱晓捷,陈涛编著,机械工业出版社,2005-2-1

基于INTEL x86处理器,论述16位微型计算机的基本原理、汇编语言和接口技术,并引出32位微机系统相关技术。

6《Intel汇编语言程序设计》(第五版),(美)欧文 著,电子工业出版社,2012-7-1

基于INTEL x86处理器、MASM编译器,以及DOS/WINDOWS平台的汇编教材,既有16位实模式的内容,也有32位保护模式的内容。

7《汇编语言的编程艺术》(第2版),(美)海德 著,清华大学出版社,2011-12-1

基于INTEL x86处理器,使用了作者自制的高级语言汇编器(High Level Assembler,HLA)作为教学工具,以部分地获得高级语言的优势和功能。

8《x86 PC汇编语言、设计与接口》(第五版),(美)马兹迪,考西著,电子工业出版社,2011-1-1

基于INTEL x86处理器,既讲了16位实模式的内容,也讲了32位保护模式的内容,对64位也有所介绍。 1《汇编语言程序设计--基于ARM体系结构》(第2版),文全刚等主编,北京航空航天大学出版社,2010-8-1

基于ARM体系结构的处理器,是学习嵌入式技术的入门教材。

2《零基础学AVR单片机》,徐益民等编著,机械工业出版社,2011-1-1

单片机概述、avr单片机的开发工具、avr单片机c语言、atmega16单片机基本结构、avr的指令系统与汇编系统等。

3《基于Multisim10的51单片机仿真实战教程》,聂典,丁伟主编,电子工业出版社,2010-2-1

阐述了NI Multisim 10在单片机仿真中的各项主要功能。

4《PIC18微控制器:体系结构、编程与接口设计》,(美)贝里著,清华大学出版社,2009-4-1

微控制器广泛应用于汽车、家电、工业控制、医疗设备等众多领域。本书以Microchip公司的PIC18系列微控制器为例,全面讲解如何使用C语言和汇编语言对微控制器进行编程。

5《CASL汇编语言程序设计》,赵立辉编著,中国电力出版社,2002-10-1

CASL汇编语言是中国计算机软件专业技术资格和水平考试高级程序员级的必考内容。本书是讲述CASL汇编语言程序设计的专著。

《汇编语言程序设计》(张晓明)电子书网盘下载免费在线阅读

链接:> 密码:zjxn

书名:汇编语言程序设计

作者:张晓明

出版年份:2009-1

页数:284

内容简介:

《汇编语言程序设计》以Microsoft宏汇编MASM为背景,系统讲述了8086指令系统及汇编语言程序设计的方法和技术,介绍了32位80x86系列微处理器指令及其程序设计。全书共分10章,第1章介绍基础知识;第2、3章介绍8086微处理器的基本结构、寻址方式及汇编语言程序格式;第4~7章叙述基本指令系统及顺序结构、分支结构、循环结构、子程序等设计方法;第8章介绍宏与多模块程序设计技术;第9章介绍输入/输出和中断程序设计;第10章介绍32位80x86微处理器指令及其程序设计方法。全书提供了大量程序实例,每章后均附有习题。

1 先学C语言,再学汇编。楼上都说了,不再赘述。

2 书籍:

C语言,《C程序设计》谭浩强,《C++程序设计》谭浩强。都讲得比较基础,很容易看懂。

汇编语言,《汇编语言(第2版)》王爽,《IBM-PC汇编语言程序设计(第2版)》沈美明、温冬婵。前者讲得比较通俗,容易上手,后者代码和实例比较多,难度偏高。

以上就是关于求答案:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。全部的内容,包括:求答案:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。、破解需要学什么、学习汇编语言的经典书籍推荐等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9392499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存